我正在尝试重组数据,以便扩展包含多个值的列以匹配我在下面列出的所需输出?我几次试图与tidyr::spread()
和tidyr::gather()
无济于事。有任何想法吗?
dat <- data.frame("name" = c("a", "b", "c"),
"count" = c("2003=22; 2004=32",
"2003=34; 2005=45",
"2005=32; 2006=67"))
name count
a 2003=22; 2004=32
b 2003=34; 2005=45
c 2005=32; 2006=67
期望的输出:
name 2003 2004 2005 2006
a 22 32 NA NA
b 34 NA 45 NA
c NA NA 32 67
可能有一种更聪明、更简洁的方法,但这有效:
library(tidyr)
dat %>%
separate(count, sep = "; ", into = c("c1", "c2")) %>%
gather(Var, Val, -name) %>%
separate(Val, sep = "=", into = c("year", "value")) %>%
select(-Var) %>%
spread(year, value)
name 2003 2004 2005 2006
1 a 22 32 <NA> <NA>
2 b 34 <NA> 45 <NA>
3 c <NA> <NA> 32 67
请注意,这会导致“宽”数据;价差前的“长”数据可能更容易处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句