我有这个数据:
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),我就对其他数据结构(而不是每个城市的数据)开放。非常感谢
发布于 2018-11-27 01:08:11
你可以
list_dfs <- split(x, x$city)
将拆分结果赋值给变量,然后使用例如list_dfs$Madrid
访问单个数据帧。
如果您更愿意将数据帧作为您的全局环境中的单个变量(请参阅https://stackoverflow.com/a/9726880/6197649),您可以这样做
list2env(split(x, x$city), envir = .GlobalEnv)
但这并不是推荐的"R做事方式“。通常最好在一个列表中有类似的结构化对象。
https://stackoverflow.com/questions/53446415
复制相似问题