首页 > 解决方案 > 如何创建遍历名称列表的数据框?

问题描述

我有这个数据框:

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))

我在 pandas 中问了同样的问题:如何创建迭代集合的数据框?但我找不到类似于字典理解的东西。

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

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

我知道循环不应该在 R 中使用并且应用更有效,但我不知道如何使用应用来做到这一点。我对其他数据结构(而不​​是每个城市的数据框)持开放态度,只要我能够轻松访问它们以传递其他功能(例如 auto.arima)。非常感谢你

标签: rloopsdataframedplyr

解决方案


你可以做

list_dfs <- split(x, x$city)

将拆分的结果分配给变量,然后使用例如访问单个数据框list_dfs$Madrid


如果您更愿意将数据框作为全局环境中的单个变量(请参阅https://stackoverflow.com/a/9726880/6197649),您可以这样做

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

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


推荐阅读