2015-06-14 23 views
1

我有一個函數my_function,它取兩個任意長度的數值向量並將它們轉換爲具有625維的單個數值向量。使用dplyr將兩列轉換爲625列

我有一個數據幀data包括三列:一個係數組,數值變量X,和數值變量Y.

我想要做沿着這些線路的操作:

library(dplyr) 

data %>% 
    group_by(Group) %>% 
    summarize(my_625_new_columns=my_function(X, Y)) 

結果應該是一個626列數據框:一列組,然後是625列,對應於my_function輸出中的每個元素。每組應該有一行。

這是可能在dplyr的框架內做到的嗎?

+0

'dcast'? –

回答

1

您可以使用ddplyplyr這個。 do也適用於dplyr

## Some data 
set.seed(0) 
dat <- data.frame(Group=factor(rep(1:2, 100)), X=rnorm(100), Y=rnorm(100)) 

## A random function to apply to groups 
## returns data.frame with same number of columns as length of x and y 
func <- function(x, y) as.data.frame(t((x+y)/2)) 

library(plyr) 
res <- ddply(dat, .(Group), function(x) { 
    func(x$X, x$Y) 
}) 
res 
# Group  V1  V2   V3   V4   V5   V6 
# 1  1 1.022407 0.3569047 -0.3578722 -1.1046582 -0.2532319 0.1755368 
# 2  2 -0.551505 0.6595048 -0.4816156 0.6653634 2.0414753 -0.8856480 
# ... 

## With `do` from dplyr 
library(dplyr) 
dat %>% group_by(Group) %>% do(func(.$X, .$Y))