2014-06-26 11 views
1

Есть ли способ воспроизвести функцию ddply? Я хотел бы получить корреляцию по группам и получить в качестве выходного кадра данные с результатами без необходимости загрузки пакета plyr.Заменить функцию ddply в R

Например, у меня есть dataframe (ДФ):

Obs Group Val1 Val2 
Obs1 Group1 1 2 
Obs2 Group1 2 1 
Obs3 Group2 5 6 
Obs4 Group2 6 5 

И я хотел бы вывод как dataframe (Corr)

Group Correlation 
Group1 -1 
Group2 -1 

Я в настоящее время используют эту функцию:

func <- function(df) 
    { 
    return(data.frame(Correlation = cor(df$Val1, df$Val2, method = "pearson"))) 
    } 

    Corr <- ddply(df, .(Group), func) 

Я попытался заменить ddply на:

Corr <- data.frame(sapply(split(df, df$Group),func)) 

Но не работал.

Любые идеи?

Спасибо за вашу поддержку.

+2

изменить фрейм данных линии 'do.call (rbind, lapply (...))' – rawr

+0

@rawr, Оставить комментарий в качестве ответа ... –

ответ

1

Этот метод использует базовый пакет, возможно, что-то вроде этого будет работать?

result <- by(df, df$Group, function(x) {cor(df$Val1, df$Val2, method = "pearson")}) 
result.dataframe <- as.data.frame(as.matrix(result)) 
result.dataframe$Correlation <- rownames(result)