我正在对数据框中的 34,000 列进行初始数据清理,为了做到这一点,我必须删除最大值小于 2 的列。
我对如何删除最大值小于 2 的列一无所知,但为了获取最大值,我尝试创建如下函数,而不使用 is.numeric 转换数据:
protein <- is.numeric(protein)
#a:
colMax <- function(data) sapply(data, max, na.rm = TRUE)
colMax(protein)
我得到的最大值对因子错误没有意义,这就是为什么我使用 is.numeric 函数将所有数据转换为数字形式。尽管如此,我仍然没有得到想要的结果。运行该函数时,我得到的结果是 0,而不是每列的最大值列表。
为什么我的 max 函数得到 0?如何设置一个可以为每列生成最大值并删除最大值小于 2 的任何列的函数?我需要两个独立的函数吗?
最佳答案
这是使用dplyr
选择max
值大于等于2的列的另一种方法。假设,我们要测试所有列以及所有这些列属于factor
类。使用@Maurits数据
library(dplyr)
df %>%
#Convert column from factor to numeric
mutate_all(~as.numeric(as.character(.))) %>%
#Select column whose max value is greater than equal to 2
select_if(~max(., na.rm = TRUE) >= 2)
# V3 V4 V5 V6 V7 V8 V9 V10
#1 3 4 5 6 7 8 9 10
#2 3 4 5 6 7 8 9 10
#3 3 4 5 6 7 8 9 10
#4 3 4 5 6 7 8 9 10
#5 3 4 5 6 7 8 9 10
#6 3 4 5 6 7 8 9 10
#7 3 4 5 6 7 8 9 10
#8 3 4 5 6 7 8 9 10
#9 3 4 5 6 7 8 9 10
#10 3 4 5 6 7 8 9 10
除了max
,我们还可以使用any
df %>%
mutate_all(~as.numeric(as.character(.))) %>%
select_if(~any(. >= 2))
你说你有 34000 列。您想检查所有列的条件是否大于 2?所有列都是因素
吗?上面的代码检查所有列并选择不满足条件的列。如果您想对选定的列(不是全部)执行此操作,您可能需要对数据进行子集化,选择这些列,然后应用代码。
在基础 R 中,我们还可以在将数据从因子转换为数字后使用 colSums
df[] <- lapply(df, function(x) as.numeric(as.character(x)))
df[, colSums(df >= 2) > 0]
关于r - 删除最大值小于给定值的列的函数,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57948388/