减少R中的data.frame的行和扩展列

时间:2014-12-10 15:44:25

标签: r dataframe

我在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)对的数量,我想为每种类型创建额外的列。

2 个答案:

答案 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包中的tidyrrename包中的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