【问题标题】:How To roll up data in R based on values in a particular column如何根据特定列中的值汇总 R 中的数据
【发布时间】:2017-06-16 12:26:34
【问题描述】:

我有如下数据框

每个 HH 在列中恰好重复 3 次。我有数百万条这样的总记录

我想将每个 HH 值的数据汇总到一行中,并删除该 HH 的剩余两行。

对于 A 列 - 每个 HH 的值采用模式,将其放在一行中。 对于每个 HH 的值的 B 列取模式,将其放在一行中。 对于 C 列 - 取每个 HH 的值的平均值,将其放在一行中。 对于 D 列 - 每个 HH 的值采用模式,将其放在一行中。

我需要对我的数据框中以千为单位的所有 HH 值执行此操作。

输出:

谢谢

【问题讨论】:

  • 查看dplyr 包。该包中有一个group_by 函数。此外,您应该在发布问题时创建一个可重现的示例。
  • 谢谢阿卡什。我一定会检查 dplyr。我现在添加了我的问题和输出的屏幕截图。这将清楚地给出关于问题的想法。是我的问题有点搞砸了:)
  • 欢迎来到 SO。请查看here,了解如何创建可重现的示例。您应该避免将您的代码或数据包含为图像,因为这意味着人们需要重新输入所有内容。 (您的链接也不起作用)

标签: r dataframe data.table


【解决方案1】:

该代码可能效率不高,但它适用于您的示例。

Problem<-matrix(c(123,0,2,16,0,123,1,3,15,1,123,1,2,14,0,456,0,2,12,1,456,0,2,18,0,456,0,2,24,0),nrow=6,ncol=5,byrow=TRUE)
colnames(Problem)<-c("HH","A","B","C","D")
Problem<-split(Problem,Problem[,1])

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
Result<-matrix(NA,nrow=length(Problem),ncol=5)
for (i in 1:length(Problem)){
Result[i,]<-c(sum(Problem[[i]][1:3])/3,Mode(Problem[[i]][4:6]),Mode(Problem[[i]][7:9]),mean(Problem[[i]][10:12]),Mode(Problem[[i]][13:15]))}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 2023-03-12
    相关资源
    最近更新 更多