【发布时间】:2020-06-12 10:06:17
【问题描述】:
我正在尝试使用另一个数据框 (file2) 的行名对 R 中的 data.frame (file1) 进行子集化。 file2 中的总行数为 166,如果我进一步对它进行子集化,它会减少到 50。现在这是有趣的部分:如果我在子集化后使用 file2 的行名(50 行),创建一个包含 50 个字符的列表,然后然后使用该列表对数据帧的 file1 子集进行子集工作正常!
file2 <-subset(file2, Compartment=="Feces")
file2=droplevels(file2, reorder=FALSE)
list=rownames(file2)
new=file1[list, ]
但是,如果我按原样使用 file2(所有 166 行)而不设置子集,那么它就不起作用! 它将 file1 减少到 166 行,但行中充满了 NA,并且一些行名(特别是以 ET 开头的行名和另外一个)已经丢失!
list=rownames(file2)
new=file1[list, ]
file1 和 2 在这里可用: https://filebin.net/zrzax0qt6n1gwszu
【问题讨论】:
-
发生这种情况是因为在您的第二种方法中,您使用的行名在
file1中不存在。当你使用这样的行名时,它必须返回一些东西,因为它找不到任何东西,它返回 NA 行。检查此示例:list = rownames(mtcars)[c(3,5)]; list2 = c(list, "unknown"); mtcars[list,]; mtcars[list2,]。为了避免这种行为,您可以改用mtcars[rownames(mtcars) %in% list2,]之类的东西。 -
该死!你是对的,但文件名应该是一样的!无论如何,感谢您的快速响应并感谢 mtcars!