如何创建遍历名称列表的数据框?

时间:2018-11-23 12:04:58

标签: r loops dataframe dplyr

我有这个数据框:

x = data.frame("city" = c("Madrid","Berlin","Florence","Madrid"), 
"Visits" = c(100,200,80,38), "Date" = c(1,2,3,4))

从该样本中,我想获得3个数据框(每个城市一个),所有值包含该城市,并命名为该城市,但不包含列城市,因此将得出以下结果:

Madrid = data.frame("Visits" = c(100,38), "Date" = c(1,4))
Berlin = data.frame("Visits" = c(200), "Date" = c(2)
Florence = data.frame("Visits" = c(80), "Date" = c(3))

我在大熊猫中问过同样的问题:How to create dataframes iterating over a set?,但找不到类似于字典理解的东西。

我设法获得了唯一列表并获得了一个城市的价值:

cities = unique(select(x,city))
for (i in cities){
  dplyr::filter(x,city == i)}

我知道循环不应该在R中使用,apply效率更高,但是我不知道如何使用apply来做到这一点。我愿意接受其他数据结构(而不​​是每个城市的数据框),只要我能够轻松访问它们以传递其他功能(例如auto.arima)即可。非常感谢

1 个答案:

答案 0 :(得分:1)

您可以

list_dfs <- split(x, x$city)

将split的结果分配给一个变量,然后使用例如list_dfs$Madrid


如果您更愿意在全局环境中将数据框作为单个变量使用(请参见https://stackoverflow.com/a/9726880/6197649),则可以

list2env(split(x, x$city), envir = .GlobalEnv)

但这不是推荐的“ R做事方式”。通常最好在单个列表中包含结构相似的对象。