数据框中行名称的交集(子集数据)?
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
由于 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