我正在尝试采用长格式数据框并根据不同变量的列表从中创建几个宽格式数据框。
我的想法是使用mapply将我想要按位置过滤的变量集传递给数据集。但它看起来不像 mapply 可以在 vars 列表中读取。
数据:
library(dplyr)
library(reshape2)
set.seed(1234)
data <- data.frame(
region = sample(c("northeast","midwest","west"), 40, replace = TRUE),
date = rep(seq(as.Date("2010-02-01"), length=4, by = "1 day"),10),
employed = sample(50000:100000, 40, replace = T),
girls = sample(1:40),
guys = sample(1:40)
)
对于每个定量变量(雇员、女孩和男人),我想创建一个宽格式数据框,其中日期为行,区域为列。
我可以使用 mapply 来更简洁地执行此操作,而不是为每个 {“employed”、“girls”、“guys”} 分别运行 melt 和 dcast 吗?
例如:
mapply(function(d,y) {melt(d[,c('region','date',y)], id.vars=c('region','date'))},
data,
c('employed','girls','guys')
)
告诉我:
>Error in `[.default`(d, , c("region", "date", y)) :
incorrect number of dimensions
我想要得到的是宽格式数据框的列表;我认为 mapply 将是传递多个参数的最简单方法,但如果有更好的方法来解决这个问题,我完全赞成。
例子:
$employed
date midwest northeast west
1 2010-02-01 62196 513366 119070
2 2010-02-02 334849 271383 160552
3 2010-02-03 187070 320594 119721
4 2010-02-04 146575 311999 310009
$girls
date midwest northeast west
1 2010-02-01 40 154 26
2 2010-02-02 88 76 61
3 2010-02-03 67 84 39
4 2010-02-04 48 95 42
$guys
date midwest northeast west
1 2010-02-01 16 140 43
2 2010-02-02 115 70 43
3 2010-02-03 63 64 42
4 2010-02-04 54 94 76