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



我不只是用平均值替换 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
}

应仅对数字列应用该函数。忽略这里的第一列(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))

最新更新