2014-12-10 2 views
1

У меня есть эта data.frame в R.Сокращение строк и столбцов расширения data.frame в R

> 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 

В основном я хочу, чтобы количество строк, чтобы быть числом (год х стран) пар, и я хочу, чтобы создать дополнительные столбцы для каждого типа.

ответ

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

Другим способом было бы использовать 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