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

Intersection of row names in dataframe (subset the data)?

由于 intersect 不适用于数据框,我尝试使用子集创建 dfA 的子集,其中仅包含 dfA 的行名称匹配的数据dfB 的行名称。我最终应该得到 3000 行,因为 dfA 有 5000 行而 dfB 有 3000 行,并且 dfB 的所有行名称都存在于 dfA 的行名称中。

以下只是returnsdfA的列名,没有任何数据

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

你应该得到一个基于 rownames 的子集 data.frames。

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

这会检查 dfA 中的哪些行名在 dfB 的行名中(which)和 returns 索引以获取 [=13= 中的数据] (dfA[...]).

如果您想坚持您的解决方案(计算成本更高):

subset(dfA, rownames(dfA) %in% rownames(dfB)) 

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