在大型6000+列数据集中,将所有NA值替换为每列的(最小值/ 2)值

问题描述 投票:0回答:1

而不是用平均值代替NA,我需要用列中的最小值代替NA,然后除以2。(我们的统计学家要求我对数据执行此操作-我不是统计学家,因此请遵循说明)

这是我的数据的一瞥:

data

        Group sp.Q13813.SPTN1_HUMAN sp.O14773.TPP1_HUMAN sp.P11137.MTAP2_HUMAN
1 Premutation           10713983468            367492324            2134747097
2 Premutation           10789498495            343303410            2677825476
3 Premutation           11134883489            383589325            2132552280
4 Premutation            9723552595            269965000            2262740921
5 Premutation           11175156282            359864993            1419225650
6 Premutation           10959077349            258095035            3343267633
7 Premutation           10770809133            331554977            2763604046
8 Premutation           11098182537            344384433            2198718886

到目前为止,这是我的代码,但是我收到功能调试错误消息:

data_ <- lapply(data, function(x) replace(x, is.na(x), (min(x, na.rm = TRUE)/2)))

Message: function (x, list, values) 
{
  x[list] <- values
  x
}

r replace min na calculation
1个回答
0
投票

您应该仅在数字列上应用该功能。由于这里不是数字,因此忽略第一列(Group)。

cols <- sapply(data, is.numeric)
data[cols] <- lapply(data[cols], function(x) 
                     replace(x, is.na(x), min(x, na.rm = TRUE)/2))

或使用dplyr,我们可以使用mutate_if,它将自动选择数字列

library(dplyr)
data %>% mutate_if(is.numeric, ~replace(., is.na(.), min(., na.rm = TRUE)/2))
© www.soinside.com 2019 - 2024. All rights reserved.