我在R.中有这个data.frame。
> a <- data.frame(year = c(2001,2001,2001,2001), country = c("Japan", "Japan","US","US"), type = c("a","b","a","b"), amount = c(35,67,39,45))
> a
year country type amount
1 2001 Japan a 35
2 2001 Japan b 67
3 2001 US a 39
4 2001 US b 45
我应该如何将其转换为看起来像这样的data.frame?
year country type.a type.b
1 2001 Japan 35 67
2 2001 US 39 45
基本上我希望行数是(year x country)对的数量,我想为每种类型创建额外的列。
答案 0 :(得分:2)
基础解决方案,但需要重命名列和行
reshape(a, v.names="amount", timevar="type", idvar="country", direction="wide")
year country amount.a amount.b
1 2001 Japan 35 67
3 2001 US 39 45
reshape2解决方案
library(reshape2)
dcast(a, year+country ~ paste("type", type, sep="."), value.var="amount")
year country type.a type.b
1 2001 Japan 35 67
2 2001 US 39 45
答案 1 :(得分:1)
另一种方法是使用spread
包中的tidyr
和rename
包中的dplyr
来提供预期结果。
library(dplyr)
library(tidyr)
spread(a,type, amount) %>%
rename(type.a = a, type.b = b)
# year country type.a type.b
#1 2001 Japan 35 67
#2 2001 US 39 45