R按因子子集后的空数据框
Posted
技术标签:
【中文标题】R按因子子集后的空数据框【英文标题】:R empty data frame after subsetting by factor 【发布时间】:2018-09-23 03:27:39 【问题描述】:我需要根据一个因素变量的内容对我的数据进行子集化。 我试着用子集来做:
new <- subset(data, original$Group1=="SALAD")
data 已经是更大数据框的子集,在 original 中,我有应该识别所需行的因子变量。 这对于因子变量的一个级别非常有效,但是(我真的不明白为什么!!)当我使用另一个因子级别“面包”执行此操作时,它会创建数据框但显示“没有可用数据" - 所以它是空的。如果这很重要,我已经从 SPSS 导入了数据。我已经检查了因子水平,但命名应该是正确的!
非常感谢您的帮助,我花了 3 个小时解决这个问题,但无法找到解决方案。 我还尝试了其他方法来对我的数据进行子集化(例如 split),但我想要一个数据框作为输出。
您有什么建议吗?如果我想对数据框进行子集化,最好的方法是什么?此数据框的 3 列,应根据因素的级别提取这些列(大多数代码示例仅针对一列或所有列..)
【问题讨论】:
我们将不胜感激一些示例数据:) 请分享您的数据。没有理由"SALAD"
应该工作,但不是 "BREAD"
。发布 str(data)
和 dput(head(data))
将帮助我们了解发生了什么。
(1) 在subset
中不需要美元符号$
; subset(data, Group1 == "SALAD")
应该可以工作。 (2) 在上面的代码行中,您使用了一个 data.frame
(data
),但基于 another data.frame
(original
) 的列进行子集化;如果data
和original
之间没有一对一的映射,这可能很危险并导致错误的结果。
谢谢。我现在尝试使用整个数据集(原始)。所以我使用了您建议的子集代码,但问题仍然存在。以下是 R 关于列/因子结构的说明: 因子 w/ 2 个级别 "SALAD","BREAD": 2 2 2 2 2 2 2 2 2 2 ... - attr(, "label" )= Named chr "SALAD vs Nutrition" ..- attr(, "names")= chr "Group1" structure(c(2L, 2L, 2L, 2L, 2L, 2L), .Label = c( “沙拉”,“面包”),class= c(“标记”,“因子”),标签 = 结构(“沙拉与营养”,.Names = “Group1”))。现在看到还有“营养”这个标签,尝试使用,问题依旧。
所以如果我使用 test
【参考方案1】:
subset
函数的全部意义(据我所知)是在数据框内查找正确的变量 - 这样您就可以键入
subset(data, var1 == "value")
而不是
data[data$var1 == "value,]
如有不妥请指正。
现在,在您的情况下,您明确地从数据框 original
中获取 Group1
并将其用于子集 data
- 您说的是 original
的子集。基于此,我认为没有理由相信(并且完全有理由不相信)original$Group1
的元素将与data
的行对齐。如果Group1
定义在data
中,为什么不直接使用那里定义的副本——正确对齐?如果没有,您需要非常明确地说明您要完成的工作,以便确保事情正确对齐。
【讨论】:
谢谢,我会改的。我刚刚完成了它,因为我不知道如何仅提取 5 列原始数据和子集,而我在数据中有这 5 列。是否可以只提取 5 列的子集(和因子级别)?以上是关于R按因子子集后的空数据框的主要内容,如果未能解决你的问题,请参考以下文章