【发布时间】:2018-09-15 16:09:01
【问题描述】:
我正在尝试创建一个子集数据框的 for 循环。这是数据:
df1 <- data.frame(
Number = c(45,62,27,34,37,55,40),
Day = c("Mon", "Tues", "Wed", "Thurs", "Fri", "Sat", "Sun"),
Time = c("1pm", "4pm", "3pm", "2pm", "4pm", "1pm", "2pm"),
City = c("Chicago", "New York", "LA", "Miami", "San Diego", "Austin", "Dallas"))
我正在尝试的功能是:
allNames<-variable.names(df1)
for (i in allNames){
if(any(variable.names(df1)== i)){
i <- df1[,c(i)]
}
}
基本上我正在尝试对数据文件进行子集化,因此最终结果将是 4 个数据集,每个数据集都有一个来自 df1 的变量,并且每个子集化的数据集将被命名为它所代表的变量。对于 df1 中的每个变量,它看起来像这样
Number
1 45
2 62
3 27
4 34
5 37
6 55
7 40
Day
1 Mon
2 Tues
3 Wed
4 Thurs
5 Fri
6 Sat
7 Sun
谢谢!
【问题讨论】:
-
我想我明白你在问什么,但我想不出为什么这可能有用。例如,拥有一个名为
Number的变量,它是一个有 1 列的data.frame,似乎与df1["Number"]相比,它没有提供任何价值(实际上,增加了复杂性)。也许如果您描述了为什么您认为这是必要的,我们可以更好地建议如何做到这一点。 (通常,处理多个相似帧最好在list帧内完成,而不是单个变量。) -
@r2evans ...我的想法完全正确!这是XY Problem。 OP 正在为我们提供他未解释的 X 问题的 Y 解决方案。可能他需要这种格式是有原因的,如果 OP 可以为我们提供更全面的背景,它可以以不同的方式完成。
-
没有人评论您的数据大小或变量的内容。当然,它们只是示例。我们评论说,这样做几乎没有充分的理由。 如果您与我们分享您流程中的下一步,我们几乎可以肯定地向您展示一种比您在其中提出的方法更简单、不那么繁琐且代码行数更少的方法你的问题。否则罗斯的回答基本上可以得到你想要的。
-
杰克,没有任何敌意的理由。通常,在 R 中特别(但无意地)提出规避优化的问题是基于误解、缺乏经验或其他原因。询问“为什么”通常很有帮助,这样可以以更符合 R 效率的方式解决潜在需求。虽然我认为罗斯提供的答案从 R 的角度来看是“不是最佳实践”,但它满足您的需求,所以请接受它并继续前进。否则,请理解我们的“为什么”问题是基于我们愿意为您提供帮助的意愿。同上@Gregor。
-
@Jake,我的回答似乎足以满足您的特定需求,但如果您觉得可以,我鼓励您描述更广泛的问题。我知道我刚开始时一直在寻找类似的方法,我发现
assign非常有帮助,但随着时间的推移,我改变了我的编程方法,很少使用assign,并且感觉更好这样做。
标签: r for-loop dataframe subset