【发布时间】:2018-02-02 22:53:15
【问题描述】:
我有一个data.frame,看起来像这样:
dfTall <- frame_data(
~id, ~x, ~y, ~z,
1, "a", 4, 5,
1, "b", 6, 5,
2, "a", 5, 4,
2, "b", 1, 9)
我想把它变成这样:
dfWide <- frame_data(
~id, ~y_a, ~y_b, ~z_a, ~z_b,
1, 4, 6, 5, 5,
2, 5, 1, 4, 9)
目前,我正在这样做
dfTall %>%
split(., .$x) %>%
mapply(function(df,name)
{df$x <- NULL; names(df) <- paste(names(df), name, sep='_'); df},
SIMPLIFY=FALSE, ., names(.)) %>%
bind_cols() %>%
select(-id_b) %>%
rename(id = id_a)
在实践中,我将需要扩展更多的数字列(即,不仅仅是y 和z)。我当前的解决方案有效,但存在一些问题,例如 id 变量的多个副本被添加到最终的 data.frame 中并且需要删除。
可以使用tidyr 中的函数(例如spread)来完成此扩展吗?
【问题讨论】:
-
旁注。我认为
tribble是frame_data的最新术语。请参阅?frame_data详细信息:“frame_data() 是 tribble() 的旧名称。它最终将被淘汰。”