r - 删除最大值小于给定值的列的函数,

标签 r max

我正在对数据框中的 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/

相关文章:

r - Stata边距/边距图转换为R?

r - 在引用类中实例化引用类 - lock() 和不变性的问题

r - 在 R 中,如果值与先前或后续值不同,如何添加 TRUE/FALSE 列?

c++ - 如何在 MATLAB 中编写 max(abs)

arrays - 大 2D 位矩阵内大小为 HxW 的最大子数组

matlab - 如何找到多个区间内的最大值?

r - 使用 unnest() 绘制存储在 tibble 中的多个不同长度的时间序列

r - 如何添加书签和恢复动态添加的模块?

MySQL 查询获取与第二列的最大值配对的列

MySQL 最大值