由于intersect
无法使用数据框,因此我尝试使用子集创建dfA
的子集,其中只有dfA
的行名称匹配的数据{{ 1}}的行名。我应该最终得到3000行,因为dfB
有5000行而dfA
有3000行,而dfB
的所有dfB
行名都存在于dfA
的行名中。
以下只返回dfA
的列名而没有任何数据。
mysubset = subset(dfA, dfA[,0] %in% dfB[,0])
答案 0 :(得分:1)
对于两个data.frames,您应该获得基于rownames
的子集。
dfA[which(rownames(dfA) %in% rownames(dfB)),]
这将检查来自dfA
的行名称是dfB
(which
)的行名称,并返回索引以获取dfA
中的数据(dfA[...]
})。
如果你想坚持你的解决方案(计算成本更高一点):
subset(dfA, rownames(dfA) %in% rownames(dfB))
答案 1 :(得分:0)
rownames
函数将允许您访问rownames,然后设置的比较条件将按预期执行。
示例,使用具有一些共享rownames的小数据框
dfA <- data.frame(x = 1:5,
y = 6:10,
row.names = letters[1:5])
# Show dfA
dfA
x y
a 1 6
b 2 7
c 3 8
d 4 9
e 5 10
dfB <- data.frame(x = 1:5,
y = 6:10,
row.names = letters[3:7])
# Show dfB
dfB
x y
c 1 6
d 2 7
e 3 8
f 4 9
g 5 10
解决方案
# Subset rows with matching rownames
dfA[ rownames(dfA) %in% rownames(dfB), ]
x y
c 3 8
d 4 9
e 5 10