2015-11-08 72 views
-1

一個數據幀的一部分,我定義的函數:應用功能上R中

my_func <- function(vector1) 
{ // do something 
vector2 //vector 2 has the same length with vector1 
} 

現在,我有一個數據幀:

id1 id2 value 
1 1 0.6 
1 1 0.7 
1 1 0.2 
1 2 0.4 
1 2 0.8 

我想在數據幀來創建一個新的列value2 ,通過在數據幀值的每個部分中應用功能my_func,使用相同的id1和相同的id2。這意味着,我想打電話給

my_func(dataframe[dataframe$id1 == i & dataframe$id2 == j,]$value)

與所有可能的ij。 並將這些新值分配給新列value2中的相應行。

更新:

輸出應該是這樣的:

id1 id2 value value2 
1 1 0.6 3 
1 1 0.7 4 
1 1 0.2 9 
1 2 0.4 2 
1 2 0.5 3 
1 2 0.8 4 
1 3 0.3 2 
... 

當[3,4,9]是my_func上的[0.6,0.7,0.2]的結果,和[2,3,4]是my_func在[0.4,0.5,0.8]結果...

+0

請出示您的預期產出,什麼是' my_func'? – akrun

+0

''my_func''只是一個在向量中計算並返回一個向量的函數,例如''my_func'接受一個10個數字的列表併產生其他10個數字。 – mamatv

+0

根據輸入數據,預期輸出是多少? – akrun

回答

-1

你可以做類似:

my_func <- function(vector1) 100+vector1 
d <- read.table(header=TRUE, text= 
'id1 id2 value value2 
1 1 0.6 3 
1 1 0.7 4 
1 1 0.2 9 
1 2 0.4 2 
1 2 0.5 3 
1 2 0.8 4 
1 3 0.3 2') 
d$v3 <- ave(d$value, d$id1, d$id2, FUN=my_func) 
+0

非常感謝,非常感謝@jogo – mamatv

0

如果我們使用 'ID1' 和 'ID2' 作爲分組變量,我們可以使用dplyr

library(dplyr) 
df1 %>% 
    group_by(id1, id2) %>% 
    mutate(value2= my_func(value)) 

data.table

library(data.table) 
setDT(df1)[, value2:= my_func(value), by = .(id1, id2)] 
+1

非常感謝akrun – mamatv