循环使用DF $ j等列名

时间:2016-09-07 13:14:33

标签: r dataframe subset rows

我有以下数据框:

    ID  A1  A2  A3    A4     B1      B2      B3      B4   
1  ID1   1   2   1     1      1       1       2       2
2  ID2   2   2   1     1      2      NA       2       1
3  ID3   2   2   1     2      1       1      NA       2          
4  ID4   1   1   1     1      1      NA      NA       2         
5  ID5   2   2   1     1     NA      NA       2      NA       
6  ID6   1   1   1     1      2       2       2       2   

我想从满足A和B的每个组合的特定条件的数据框中提取行。这些是条件:

  • PP:A型列中存在的值2 + B型列中存在的值2

  • PA:A型列中存在的值2 + B型列中存在的值1

  • AP:A型列中存在的值1 + B型列中存在的值2

  • AA:A型列中存在的值1 + B型列中存在的值1

这就是我写的:

A <- colnames(dataframe)[2:5]
# A = A1, A2, A3 and A4
B <- colnames(dataframe)[6:9] 
# B = B1, B2, B3 and B4

for (a in A) {  
   for (b in B) {
         PP <- dataframe[dataframe$a=='2' & dataframe$b=='2' , ]
         PA <- dataframe[dataframe$a=='2' & dataframe$b=='1' , ]
         AP <- dataframe[dataframe$a=='1' & dataframe$b=='2' , ]
         AA <- dataframe[dataframe$a=='1' & dataframe$b=='1' , ]
        print(head(PP)) #to have a preview
    }
 }

然而,新的数据框架是空的,我不明白为什么。 理想情况下,第一个for循环(a = A1和b = B1)因此会输出:

PP:

     ID  A1  A2  A3  A4  B1  B2  B3  B4
 2  ID2   2   2   1   1   2  NA   2   1

PA

    ID  A1  A2  A3  A4  B1  B2  B3  B4
3  ID3   2   2   1   2   1   1  NA   2  

AP:

    ID  A1  A2  A3  A4  B1  B2  B3  B4
6  ID6   1   1   1   1   2   2   2   2   

AA

    ID  A1  A2  A3  A4  B1  B2  B3  B4
1  ID1   1   2   1   1   1   1   2   2

我希望有人可以提供帮助。 谢谢。

1 个答案:

答案 0 :(得分:1)

美元符号提取正在造成问题。它不适用于dataframe$a中的变量传递。因为a不是实际名称。您正尝试将变量名称传递给它。但该运算符将查找文字a列,但找不到它。试试dataframe[,a]