当R上不存在变量的所有元素时,如何使用ddply进行聚合

当R上不存在变量的所有元素时,如何使用ddply进行聚合,r,merge,plyr,R,Merge,Plyr,我在使用ddply和merge组合来聚合一些变量时遇到问题。我使用的数据帧非常大,因此我在下面举一个例子: data_sample <- cbind.data.frame(c(123,123,123,321,321,134,145,000), c('j', 'f','j','f','f','o','j','f'), c(seq(110,180, by = 10)))

我在使用ddply和merge组合来聚合一些变量时遇到问题。我使用的数据帧非常大,因此我在下面举一个例子:

data_sample <- cbind.data.frame(c(123,123,123,321,321,134,145,000),
                               c('j', 'f','j','f','f','o','j','f'),
                               c(seq(110,180, by = 10)))

colnames(data_sample) <- c('Person','Expense_Type','Expense_Value')

data\u sample我们可以使用
by
功能:

by(data_sample, data_sample$Person, FUN = function(dat){
    sum(dat[dat$Expense_Type == 'j',]$Expense_Value) / sum(dat$Expense_Value)
})
我们还可以使用dplyr包:

library(dplyr)
data_sample %>%
    group_by(Person) %>%
    summarise(Percent_J = sum(ifelse(Expense_Type == 'j', Expense_Value, 0)) / sum(Expense_Value))

# A tibble: 5 × 2
  Person Percent_J
   <dbl>     <dbl>
1      0 0.0000000
2    123 0.6666667
3    134 0.0000000
4    145 1.0000000
5    321 0.0000000
库(dplyr)
数据\u样本%>%
分组单位(人)%>%
汇总(百分比=总和(如果其他(费用类型='J',费用值,0))/sum(费用值))
#一个tibble:5×2
人百分比
1      0 0.0000000
2    123 0.6666667
3    134 0.0000000
4    145 1.0000000
5    321 0.0000000

假设原始数据集上有其他列,其数据仅因人员而异。在进行聚合后,我如何保留这些值?因此对于每个人来说,它都是相同的值(例如,人A的所有行只有x,人B的所有行只有y?将
合并到一个不同的表可能会起作用。否则,您可以通过
dplyr
中的
将变量添加到
group\u中。抱歉,由于我没有足够的声誉,因此无法显示我的投票。
library(dplyr)
data_sample %>%
    group_by(Person) %>%
    summarise(Percent_J = sum(ifelse(Expense_Type == 'j', Expense_Value, 0)) / sum(Expense_Value))

# A tibble: 5 × 2
  Person Percent_J
   <dbl>     <dbl>
1      0 0.0000000
2    123 0.6666667
3    134 0.0000000
4    145 1.0000000
5    321 0.0000000