【问题标题】:dcast function taking arguments from two value variablesdcast 函数从两个值变量中获取参数
【发布时间】:2017-11-09 17:07:05
【问题描述】:

假设我有一个具有以下结构的示例数据框

cars=c("A","A","A","A", "B","B","B","B", "C","C","C","C","A","A","A","A", "B","B","B","B", "C","C","C","C")
vendor=c("d","e","f","g", "d","e","f","g", "d","e","f","g", "d","e","f","g", "d","e","f","g", "d","e","f","g")
state=c(1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2)
PS_mean=c(100, 110, 120, 130, 90, 95, 140, 180, 70, 80, 120, 150, 100, 110, 120, 130, 90, 95, 140, 180, 70, 80, 120, 150)
PS_stdv=c(10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40)
mycars=data.frame(cars, vendor, state, PS_mean, PS_stdv)

我现在想用类似 dcast 的方式进行整形

mycars_cov<-dcast(setDT(mycars[c('cars','state','PS_mean','PS_stdv')]), cars~state, value.var=c("PS_mean", "PS_stdv"), car_PS_var("PS_mean", "PS_stdv"))

如您所见,函数“car_PS_var”是用户定义的,有两个输入

car_PS_var<- function(x,y){
   x<-as.numeric(x)
   y<-as.numeric(y)
   z=sd(x)*sd(y)/mean(x)
   return(z)
}

我不知道如何应用一个将两个“value.var”作为参数并返回一个的函数。通常使用 dcast 你只能将一个函数应用于一个变量,这就是为什么 car_PS_var("PS_mean", "PS_stdv") 不起作用

在这种形式下,R 会抛出一些错误,因为它不能在 dcast 函数中接受两个输入。

那么我该如何正确地做到这一点呢?如果您建议任何其他可以完成任务的 R 方法,也可以

【问题讨论】:

    标签: r aggregate dcast


    【解决方案1】:

    不确定我是否理解您的目标,但根据我的解释,一种快速而肮脏的方法是先按汽车和状态分组,创建新列,然后 dcast 新数据表

    mycars <- as.data.table(mycars)
    
    temp <- mycars[, .(z = car_PS_var(PS_mean, PS_stdv)),
                  by = c("cars", "state")]
    
    dcast(temp, cars ~ state)
    
       cars        1        2
    1:    A 1.449275 1.449275
    2:    B 4.325825 4.325825
    3:    C 4.545340 4.545340
    

    【讨论】:

    • 太好了,这正是我想要的。非常感谢!
    • 对您的代码提出一个问题:创建临时变量的命令如何工作?点在那里做什么?
    • .() 是 list() 的别名。要了解该功能,您可以阅读 data.table 的小插图cran.r-project.org/web/packages/data.table/vignettes/…
    猜你喜欢
    • 2023-02-05
    • 1970-01-01
    • 2021-04-08
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    相关资源
    最近更新 更多