我的data.frame(df)由20个不同的列组成。
所有我的专栏是整数值(范围0 - 99)
如何在不定义每列的情况下对整个data.frame中的特定值进行子集划分?
比方说,我想子集我有较低的值(x)大于4
所以我的代码可能是COL1和COL2的数据:
df2 <- subset(df, col1 < 4 & col2 < 4)
这很好。
但是,如何修改我的代码以获得我所有20列的新子集。没有指定每一个特定的列。 ?
感谢您的帮助!
我的data.frame(df)由20个不同的列组成。
所有我的专栏是整数值(范围0 - 99)
如何在不定义每列的情况下对整个data.frame中的特定值进行子集划分?
比方说,我想子集我有较低的值(x)大于4
所以我的代码可能是COL1和COL2的数据:
df2 <- subset(df, col1 < 4 & col2 < 4)
这很好。
但是,如何修改我的代码以获得我所有20列的新子集。没有指定每一个特定的列。 ?
感谢您的帮助!
这里是比apply
更快的方法,使用max.col
,基质子集,和逻辑子集。首先,构建一个样本数据集。
set.seed(1234)
dat <- data.frame(a=sample(1:3, 5, replace=TRUE),
b=sample(1:4, 5, replace=TRUE),
c=sample(1:6, 5, replace=TRUE))
看起来像这样。
dat
a b c
1 1 3 5
2 2 1 4
3 2 1 2
4 2 3 6
5 3 3 2
请注意,只有第三列的值大于4,列中只有2个这样的元素通过测试。现在,我们做
dat[dat[cbind(seq_along(dat[[1]]), max.col(dat))] > 4, ]
a b c
1 1 3 5
4 2 3 6
这里,max.col(dat)
返回每行最大值的列。 seq_along(dat[[1]])
贯穿行号。 cbind
返回一个矩阵,我们使用该矩阵为矩阵子集提取每行的最大值。然后,比较这些值,看看是否有大于4的数字,用> 4
返回一个逻辑向量,其长度是data.frame的行数。这用于逐行对数据进行子集分类。
如果你提供了一个[可重现的例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)和样本输入,它会更容易帮助你数据可用于测试和验证可能的解决方案。 – MrFlick
@MrFlick正确 - >我正在寻找一种有效的方法来编写这样的案例,如我的示例 – ira01
@ G5W,当数据有“NA”会产生问题〜 – Wen