我有这个数据框:
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)即可。非常感谢
答案 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做事方式”。通常最好在单个列表中包含结构相似的对象。