R中的子集列具有特定值

时间:2015-01-29 11:50:41

标签: r

给定大数据帧,例如df,有500列和100行,我如何只是超出特定阈值的列的子集,例如1?

由于

2 个答案:

答案 0 :(得分:3)

假设您的子集列的所有值都大于1,您可以执行类似的操作(基本上您也可以根据您可能具有的任何条件使用以下内容。只需更改if条件):

示例数据

a <- data.frame(matrix(runif(90),ncol=3))

> a
           X1         X2         X3
1  0.33341130 0.09307143 0.51932506
2  0.78014395 0.30378432 0.67309736
3  0.19967771 0.30829771 0.60144888
4  0.77736355 0.42504910 0.23880491
5  0.60631868 0.55198423 0.29565519
6  0.24246456 0.57945721 0.17882712
7  0.10499677 0.48768998 0.54931955
8  0.92288335 0.29290491 0.72885160
9  0.85246128 0.87564673 0.60069170
10 0.39931205 0.29895856 0.83249469
11 0.33674259 0.85618041 0.62940935
12 0.27816980 0.51508938 0.76079354
13 0.19121182 0.27586235 0.21273823
14 0.66337625 0.18631150 0.67762964
15 0.00923405 0.84753915 0.08386400
16 0.33209371 0.54919903 0.49128825
17 0.97685675 0.25564765 0.56439142
18 0.26710042 0.75852884 0.88706946
19 0.32422355 0.58971620 0.84070049
20 0.73000898 0.09068726 0.92541277
21 0.80547283 0.93723241 0.31050230
22 0.28897215 0.80679092 0.06080124
23 0.32190269 0.12254342 0.42506740
24 0.52569405 0.68506407 0.68302356
25 0.31098388 0.66225007 0.08565480
26 0.67546897 0.08123716 0.58419470
27 0.29501987 0.17836528 0.79322116
28 0.20736102 0.81145297 0.44078101
29 0.75165829 0.51865202 0.36653840
30 0.63375066 0.03804626 0.69949846

<强>解决方案

只需一个lapply即可。我在这里使用0.05作为阈值,因为根据我的随机数据集更容易演示如何使用它。将其更改为数据集中的任何内容。

b <- do.call(cbind, (lapply(a, function(x) if(all(x>0.05)) return(x) )))

<强>输出

> b
              X3
 [1,] 0.51932506
 [2,] 0.67309736
 [3,] 0.60144888
 [4,] 0.23880491
 [5,] 0.29565519
 [6,] 0.17882712
 [7,] 0.54931955
 [8,] 0.72885160
 [9,] 0.60069170
[10,] 0.83249469
[11,] 0.62940935
[12,] 0.76079354
[13,] 0.21273823
[14,] 0.67762964
[15,] 0.08386400
[16,] 0.49128825
[17,] 0.56439142
[18,] 0.88706946
[19,] 0.84070049
[20,] 0.92541277
[21,] 0.31050230
[22,] 0.06080124
[23,] 0.42506740
[24,] 0.68302356
[25,] 0.08565480
[26,] 0.58419470
[27,] 0.79322116
[28,] 0.44078101
[29,] 0.36653840
[30,] 0.69949846

此时只有第3栏确认了这一情况,所以它被退回了。

答案 1 :(得分:3)

或另一种选择(基于@ LyzandeR的数据)。获取逻辑条件colSumsa <= 0.05)并取消它(!)。如果特定列有0个值,则此步骤将转换为TRUE。这可用于选择列。

a[,!colSums(a<=0.05), drop=FALSE]
相关问题