R中数据帧的逐列子集

时间:2016-07-01 18:27:22

标签: r dataframe filter subset between

我需要一些data.frame子集/过滤器的帮助。下面是我的随机数据集的代码。

A <- c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4)
B <- c(3,3,3,3,4,4,4,4,1,1,1,1,2,2,2,2)
C <- c(1,1,1,1,3,3,3,3,2,2,2,2,4,4,4,4)
Fakey <- data.frame(A, B, C)
Filter_Fakey <- subset(Fakey, (Fakey>1 & Fakey<4))

最后一行coode导致以下结果:

> Filter_Fakey
       A  B  C
5      2  4  3
6      2  4  3
7      2  4  3
8      2  4  3
9      3  1  2
10     3  1  2
11     3  1  2
12     3  1  2
NA    NA NA NA
NA.1  NA NA NA
NA.2  NA NA NA
NA.3  NA NA NA
NA.4  NA NA NA
NA.5  NA NA NA
NA.6  NA NA NA
NA.7  NA NA NA
NA.8  NA NA NA
NA.9  NA NA NA
NA.10 NA NA NA
NA.11 NA NA NA
NA.12 NA NA NA
NA.13 NA NA NA
NA.14 NA NA NA
NA.15 NA NA NA

但我真正想要的是这个,

> Filter_Fakey
       A  B  C
5      2  3  3
6      2  3  3
7      2  3  3
8      2  3  3
9      3  2  2
10     3  2  2
11     3  2  2
12     3  2  2
NA    NA NA NA
NA.1  NA NA NA
NA.2  NA NA NA
NA.3  NA NA NA
NA.4  NA NA NA
NA.5  NA NA NA
NA.6  NA NA NA
NA.7  NA NA NA
NA.8  NA NA NA
NA.9  NA NA NA
NA.10 NA NA NA
NA.11 NA NA NA
NA.12 NA NA NA
NA.13 NA NA NA
NA.14 NA NA NA
NA.15 NA NA NA

我已尝试subset(), subset(with a negation condition), filter{dplyr},以及不同的括号注释('[''[[')。谢谢你帮助我。

2 个答案:

答案 0 :(得分:0)

使用canActivate循环遍历数据框的列,并将条件中的值设置为lapply,如果这是您所追求的。使用NAorder(is.na(...))值排列到最后位置:

NA

答案 1 :(得分:0)

另一种选择是使用data.frame(lapply(Fakey, function(x) `length<-`(x[x > 1 & x <4], nrow(Fakey)))) # A B C #1 2 3 3 #2 2 3 3 #3 2 3 3 #4 2 3 3 #5 3 2 2 #6 3 2 2 #7 3 2 2 #8 3 2 2 #9 NA NA NA #10 NA NA NA #11 NA NA NA #12 NA NA NA #13 NA NA NA #14 NA NA NA #15 NA NA NA #16 NA NA NA 在使用逻辑条件对每个列进行子集化后,在结束时填充NA。

void fun()
{
    // What goes here?
}
void main()
{
    int x = 20;
    fun();
    x = 10;
    printf("%d",x); // Should print 20.
}