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

R 数据帧中行名称的交集(数据子集)?,r,dataframe,dplyr,subset,intersect,R,Dataframe,Dplyr,Subset,Intersect,由于intersect不适用于数据帧,因此我尝试使用subset创建dfA的子集,其中只包含dfA的行名与dfB的行名匹配的数据。我应该以3000行结束,因为dfA有5000行,dfB有3000行,而dfB的所有行名都存在于dfA的行名中 下面只返回dfA的列名,没有任何数据 mysubset = subset(dfA, dfA[,0] %in% dfB[,0]) 对于这两个data.frames,您应该基于行名获得一个子集 dfA[which(rownames(dfA) %in% rown

由于
intersect
不适用于数据帧,因此我尝试使用subset创建
dfA
的子集,其中只包含
dfA
的行名与
dfB
的行名匹配的数据。我应该以3000行结束,因为
dfA
有5000行,
dfB
有3000行,而
dfB
的所有行名都存在于
dfA
的行名中

下面只返回
dfA
的列名,没有任何数据

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

对于这两个data.frames,您应该基于
行名
获得一个子集

dfA[which(rownames(dfA) %in% rownames(dfB)),]
这将检查
dfA
中的哪些行名位于
dfB
which
)的行名中,并返回索引以获取
dfA
dfA[…]
)中的数据

如果您想坚持使用您的解决方案(从计算角度来说,这会花费更多):


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

dfA[which(rownames(dfA)%in%rownames(dfB)),]
dplyr::semi_join
此外,在
R
中没有索引零,索引是基于1的
dfA[,0]
dfB[,0]
不存在。我选择这个答案是因为它经济;尽管如此,马苏德的答案同样有效。我不知道为什么我忘记了所有的
行名
;我一定很专注于使用
mydf[,0]
。谢谢
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