数据帧中行名称的交集(数据的子集)?

时间:2017-07-19 19:16:37

标签: r dataframe dplyr subset intersect

由于intersect无法使用数据框,因此我尝试使用子集创建dfA的子集,其中只有dfA的行名称匹配的数据{{ 1}}的行名。我应该最终得到3000行,因为dfB有5000行而dfA有3000行,而dfB的所有dfB行名都存在于dfA的行名中。

以下只返回dfA的列名而没有任何数据。

mysubset = subset(dfA, dfA[,0] %in% dfB[,0]) 

2 个答案:

答案 0 :(得分:1)

对于两个data.frames,您应该获得基于rownames的子集。

dfA[which(rownames(dfA) %in% rownames(dfB)),]

这将检查来自dfA的行名称是dfBwhich)的行名称,并返回索引以获取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