假设我有三列A,B和C.我已经采用了A的一个子集(比如每隔一行),我如何在C中获得这些行的相应值?
A B C
1 a1 a1 c1
2 a2 b2 c2
3 a3 b3 c3
4 a4 b4 c4
我想:
A C
1 a1 c1
2 a3 c3
注意:对A列中的子集使用每隔一行只是一个例子,我正在寻找更通用的解决方案。也就是说,如果我有A列的子集,我如何在C列中获得相应的值?
答案 0 :(得分:1)
我们可以将TRUE/FALSE
作为行索引进行回收以获取交替行,将列名称作为列索引进行回收以对数据集进行子集化。
df1[c(TRUE, FALSE),c('A', 'C')]
# A C
#1 a1 c1
#3 a3 c3
如果我们想根据'A'中的值对行进行子集化,请根据'A'创建行索引,并选择我们需要在预期输出中包含的列。
df1[df1$A %in% c('a1', 'a3'), c('A', 'C')]
如果我们使用data.table
(使用setDT
将data.frame转换为data.table),我们可以设置键列,然后使用'subA中的元素直接对行进行子集化”。对于列索引,它与上面的类似,但我们需要使用with=FALSE
。可以在?data.table
library(data.table)
subA <- c('a1', 'a3')
setDT(df1, key='A')[subA, c('A', 'C'), with=FALSE]
# A C
#1: a1 c1
#2: a3 c3