在超过 6000 列的大型数据集中,将所有 NA 值替换为每列的(最小 value/2)值
Replace all NA values with the (minimum value/2) value for each column, in large 6000+ column dataset
我需要用列中的最小值除以 2 代替 NA,而不是仅仅用平均值代替 NA。(我们的统计学家要求我对我们的数据执行此操作 - 我不是统计学家所以按照他们的指示)
这是我的数据概览:
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
这将自动 select 数字列
library(dplyr)
data %>% mutate_if(is.numeric, ~replace(., is.na(.), min(., na.rm = TRUE)/2))
我需要用列中的最小值除以 2 代替 NA,而不是仅仅用平均值代替 NA。(我们的统计学家要求我对我们的数据执行此操作 - 我不是统计学家所以按照他们的指示)
这是我的数据概览:
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
这将自动 select 数字列
library(dplyr)
data %>% mutate_if(is.numeric, ~replace(., is.na(.), min(., na.rm = TRUE)/2))