2015-08-24 4 views
2

Я пытаюсь преобразовать формат фрейма данных с помощью R. Я хочу уникальное название компании, поскольку у нее есть несколько наблюдений для каждой компании. Мои данные выглядитИзмените данные с длинного на широкий с несколькими объясненными переменными

company name Values Year 
    A    1 2010 
    A    2 2011 
    B    4 2010 
    B    6 2012 
    C    8 2011 

Я хочу ниже формат

company name first_value First_year second_values second_year 
    A    1   2010   2   2011 
    B    4   2010   6   2012 
    C    8   2011   NA   NA 

Я попробовал этот код, но он не дает результат, что я ожидал

library(plyr) 
extract.hashtags <- function(x) { 
x <- subset(x,select=c(-Company.Name)) 
mat <- as.matrix(x) 
dim(mat) <- c(1,length(mat)) 
as.data.frame(mat) 
} 

df1 = ddply(data, .(Company.Name), extract.hashtags) 

ответ

6

Вы можете использовать reshape в базе R после добавления переменной «время», которая может быть выполнена с помощью getanID из моего пакета «splitstackshape»:

reshape(getanID(mydf, "companyname"), idvar = "companyname", 
      timevar = ".id", direction = "wide") 
# companyname Values.1 Year.1 Values.2 Year.2 
# 1:   A  1 2010  2 2011 
# 2:   B  4 2010  6 2012 
# 3:   C  8 2011  NA  NA 
+0

Thank u Friend. Оно работает. – Sameer

6

Аналогичное решение с использованием devel version of data.table (v 1.9.5+)

library(data.table) ## v 1.9.5+ 
dcast(setDT(df)[, indx := 1:.N, by = company_name], 
     company_name ~ indx, value.var = c("Values", "Year")) 

# c ompany_name Values_1 Values_2 Year_1 Year_2 
# 1:   A  1  2 2010 2011 
# 2:   B  4  6 2010 2012 
# 3:   C  8  NA 2011  NA 

Идея заключается в том, чтобы добавить счетчик в каждой группе, а затем изменить форму с длиной до широкого в соответствии с этим счетчиком при задании две переменные как объясненные вары одновременно (в настоящее время доступны только в версии devel).

+1

Спасибо, Друг. – Sameer

Смежные вопросы