簡體   English   中英

在 R 中的數據幀的一部分上應用函數

[英]Apply a function on part of a dataframe in 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] ...

如果我們使用 '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)]

你可以這樣做:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM