由于intersect
不适用于数据框,因此我尝试使用子集创建dfA
的子集,仅使用dfA
的行名与dfB
的行名匹配的数据。因为dfA
有5000行,dfB
有3000,所以dfB
的行名都存在于dfA
的行名中。数据框中的行名相交(数据子集)?
以下仅返回dfA
的列名称,没有任何数据。
mysubset = subset(dfA, dfA[,0] %in% dfB[,0])
由于intersect
不适用于数据框,因此我尝试使用子集创建dfA
的子集,仅使用dfA
的行名与dfB
的行名匹配的数据。因为dfA
有5000行,dfB
有3000,所以dfB
的行名都存在于dfA
的行名中。数据框中的行名相交(数据子集)?
以下仅返回dfA
的列名称,没有任何数据。
mysubset = subset(dfA, dfA[,0] %in% dfB[,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
我选择这个答案,因为它很经济;尽管马苏德的答案也适用。我不知道为什么我忘了所有关于'rownames';我一定非常重视使用'mydf [,0]'。谢谢! – user8121557
对于两个data.frames,您应该得到一个基于rownames
的子集。
dfA[which(rownames(dfA) %in% rownames(dfB)),]
此检查从dfA
行的名称是在dfB
(which
)行的名称,并返回指数来获得dfA
(dfA[...]
)的数据。
如果你要坚持你的解决方案(花费多一点,计算):
subset(dfA, rownames(dfA) %in% rownames(dfB))
'DFA [(以%rownames rownames(DFA)%(DFB))其中,]' – Masoud
' dplyr :: semi_join' –
另外,'R'中没有索引零,索引是从1开始的。 'dfA [,0]'和'dfB [,0]'不存在。 –