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) 的列进行子集化;如果dataoriginal 之间没有一对一的映射,这可能很危险并导致错误的结果。 谢谢。我现在尝试使用整个数据集(原始)。所以我使用了您建议的子集代码,但问题仍然存在。以下是 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按因子子集后的空数据框的主要内容,如果未能解决你的问题,请参考以下文章

一个因子的 addNA 之后的子集数据帧

编写一个 R 函数,它只在声明时子集

如何从因子子集中获取统计数据?

R randomForest子集无法摆脱因子水平[重复]

从R中的数据框中子集列[重复]

R中数据框的空间子集