【问题标题】:Applying functions on columns by group按组对列应用函数
【发布时间】:2017-03-11 17:49:48
【问题描述】:

我想根据类别对数据集应用一个函数。给定以下数据框

pet <- c(rep("cat",5),rep("dog",5))
year <- c(rep(1991:1995,2))
karma <- c(5,4,1,1,1,6,4,3,2,6)
df <- data.frame(pet,year,karma)

看起来像这样

   pet year karma
1  cat 1991     5
2  cat 1992     4
3  cat 1993     1
4  cat 1994     1
5  cat 1995     1
6  dog 1991     6
7  dog 1992     4
8  dog 1993     3
9  dog 1994     2
10 dog 1995     6

我想每年对 karma 列执行操作。如果我想应用像 sum 这样的函数,可以使用 ddply 来完成:

ddply(df, .(year),summarize, sum(karma))

我如何将它应用到我自己编写的函数中,例如

calc <- function(d,c){(d*5+c*7)/12}

其中d是对应于狗在每一年的业力值,c是对应于猫的业力值。

理想情况下,我希望在此数据框中再添加五个条目,其中包含宠物 both、年份和由上述函数计算的业力值。最好的方法是什么?

(非常抱歉,如果这是微不足道的,但我这次真的找不到类似的问题。)

【问题讨论】:

    标签: r function dataframe plyr


    【解决方案1】:

    您可以使用spread 使您的数据框变宽,然后使用mutate 来实现您的功能

    library('tidyr')
    library('dplyr')
    df %>% 
     spread(pet, karma, drop = FALSE) %>% 
     mutate(karma = calc(dog, cat), pet = "both") %>% 
     select(year, pet, karma) %>%
     rbind(df)
    

    【讨论】:

    • 不应该是calc(dog, cat)吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多