简而言之:我拥有的:
ID Name wage2010 wage2011 wage2012 kids2010 kids2011 kids2012
1 Chris 20,000 18,000 21,000 2 2 2
2 Pat 40,000 45,000 45,000 1 1 2
3 Susan 10,000 18,000 15,000 0 1 1
我想要的是:
ID Name year wage kids
1 Chris 2010 20,000 2
1 Chris 2011 18,000 2
1 Chris 2012 21,000 2
2 Pat 2010 40,000 1
2 Pat 2011 45,000 1
2 Pat 2012 45,000 2
3 Susan 2010 10,000 0
3 Susan 2011 18,000 1
3 Susan 2012 15,000 1
有任何帮助建议吗?非常感谢。
我们可以使用melt
中的data.table
library(data.table)
melt(setDT(df1), measure = patterns('^wage', '^kids'),
variable.name = 'year', value.name = c('wage', 'kids'))
或使用pivot_longer
中的tidyr
library(tidyr)
pivot_longer(df1, names_to = c('year', '.value'), names_sep = "(?<=[a-z])(?=[0-9]"))