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