首页 文章

在R中的数据帧的一部分上应用函数

提问于
浏览
-1

我定义了一个函数:

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 中的相应行 .

Update:

输出应如下所示:

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]是[0.6,0.7,0.2]上的 my_func 的结果时,[2,3,4]是 my_func 对[0.4,0.5,0.8]的结果......

2 回答

  • 0

    你可以这样做:

    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)
    
  • -1

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

相关问题