我有一个包含3列的数据框(如下所示):
df <- data.frame(
id = c(1,1,1,2,2,2),
Year = c(2007, 2008, 2009, 2007, 2008, 2009),
A = c(5, 2, 3, 7, 5, 6),
B = c(10, 0, 50, 13, 17, 17)
)
df
我想要这个:
df_needed <- data.frame(
id= c(1, 2),
A_2007 = c(5, 7),
B_2007 = c(10, 13),
A_2008 = c(2, 5),
B_2008 = c(0, 17),
A_2009 = c(3, 6),
B_2009 = c(50, 17)
)
df_needed
我熟悉reshape
和tidyR
,但我不认为他们可以管理这种转变。
是否有适当的方法做到这一点,或者我需要使用自定义函数来做到这一点?
编辑:已对本示例进行了编辑,以改进最终数据集中包含1条以上记录的示例。
尝试
library(dplyr)
library(tidyr)
gather(df, Var, Val, -Year) %>%
unite(YearVar, Var, Year) %>%
mutate(indx=1) %>%
spread(YearVar, Val)%>%
select(-indx)
# A_2007 A_2008 A_2009 B_2007 B_2008 B_2009
#1 5 2 3 10 0 50
对于编辑,您可以在 gather
gather(df, Var, Val, A:B) %>%
unite(YearVar, Var, Year) %>%
spread(YearVar, Val)
# id A_2007 A_2008 A_2009 B_2007 B_2008 B_2009
#1 1 5 2 3 10 0 50
#2 2 7 5 6 13 17 17
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句