【发布时间】:2022-11-22 04:12:45
【问题描述】:
我有这个示例数据框。
df <- data.frame (MARKET = c("US", "US", "UK", "UK", "China", "China", "Brazil", "Brazil", "US", "US", "UK", "UK", "China", "China", "Brazil", "Brazil","US", "US", "UK", "UK", "China", "China", "Brazil", "Brazil","US", "US", "UK", "UK", "China", "China", "Brazil", "Brazil","US", "US", "UK", "UK", "China", "China", "Brazil", "Brazil"),
MEAL = c("Breakfast", "Lunch", "Dinner", "Breakfast", "Lunch", "Dinner","Breakfast", "Lunch", "Dinner","Breakfast", "Lunch", "Dinner","Breakfast", "Lunch", "Dinner","Breakfast", "Lunch", "Dinner","Breakfast", "Lunch", "Dinner","Breakfast", "Lunch", "Dinner","Breakfast", "Lunch", "Dinner","Breakfast", "Lunch", "Dinner", "Breakfast", "Lunch", "Dinner", "Breakfast", "Lunch", "Dinner", "Breakfast", "Lunch", "Dinner", "Breakfast")
)
我想创建单独的数据框子集,其中包含膳食和市场的每种组合(即 Brazil_Breakfast、Brazil_Lunch、Brazil_Dinner 等)。
我在这里从每个变量中获取行名称。
markets <- rownames(table(df$MARKET))
meals <- rownames(table(df$MEAL))
我知道我可以像这样子集其中之一
brazil_breakfast <- subset(df, MARKET==markets[1] & MEAL==meals[1])
但我希望能够自动执行此操作。这是我起草的 for 循环的草稿。
for (i in length(markets)) {
for (j in length(meals)) {
i_j <- subset(df, MARKET==markets[i] & MEAL==meals[j])
}
}
但这只会创建最后一个组合,即 US 和 Lunch,实际上它的字面意思是 i_j。
如何在 for 循环中创建一个单独的新数据帧?也很高兴使用 apply 语句。
谢谢!
【问题讨论】:
-
你需要
split,比如df_list = split(df, df[c("MARKET", "MEAL")])。如果你真的想要它们在全局环境中,你可以使用list2env(df_list),但在大多数情况下,你最好将它们保存在list中(或者根本不拆分它们......不确定你为什么要这样做这样做,但你可以做到很多“按组”与dplyr或data.table)