简体   繁体   English

合并多列中具有相同值的行

[英]Merge rows having same values in multiple columns

I have an excel file with multiple rows and columns (13232 rows and 18 columns). 我有一个包含多行和多列(13232行和18列)的Excel文件。 The last column gives some value. 最后一列给出了一些价值。 What I want to do is - find the rows with same column details except the last one and sum their last column value. 我想要做的是 - 找到除最后一列之外具有相同列详细信息的行,并将它们的最后一列值相加。 For example: if input is 例如:如果输入是

+---------+---------+---------+---------+
| Column1 | Column2 | Column3 | Column4 |
+---------+---------+---------+---------+
| ABC     | DEF     | GHI     |       5 |
| XYZ     | PQR     | LMN     |       4 |
| ABC     | DEF     | GHI     |      11 |
| Test1   | Test2   | Test3   |      12 |
| XYZ     | PQR     | LMN     |      54 |
+---------+---------+---------+---------+

then output should be 那么输出应该是

+---------+---------+---------+---------+
| Column1 | Column2 | Column3 | Column4 |
+---------+---------+---------+---------+
| ABC     | DEF     | GHI     |      16 |
| XYZ     | PQR     | LMN     |      58 |
| Test1   | Test2   | Test3   |      12 |
+---------+---------+---------+---------+

How this can be acheived in R? 如何在R中实现这一目标?

You can use aggregate from base R 您可以使用base R aggregate

 aggregate(Column4~., df1, FUN=sum)
 #    Column1 Column2 Column3 Column4
 #1     ABC     DEF     GHI      16
 #2     XYZ     PQR     LMN      58
 #3   Test1   Test2   Test3      12

Or 要么

 library(data.table)
 setDT(df1)[, list(Column4=sum(Column4)), by = c(names(df1)[1:3])]
 #     Column1 Column2 Column3 Column4
 #1:     ABC     DEF     GHI      16
 #2:     XYZ     PQR     LMN      58
 #3:   Test1   Test2   Test3      12

Or 要么

 library(sqldf)
 sqldf('select Column1, Column2, Column3,
          sum(Column4) as Column4
          from df1 
          group by Column1, Column2, Column3')
 #   Column1 Column2 Column3 Column4
 #1     ABC     DEF     GHI      16
 #2   Test1   Test2   Test3      12
 #3     XYZ     PQR     LMN      58

Or 要么

library(dplyr)
df1 %>% group_by(Column1, Column2, Column3) %>%
  summarize(Column4 = sum(Column4))
# Source: local data frame [3 x 4]
# Groups: Column1, Column2

#   Column1 Column2 Column3 Column4
# 1     ABC     DEF     GHI      16
# 2   Test1   Test2   Test3      12
# 3     XYZ     PQR     LMN      58

Reproducible data: 可重复的数据:

df1 <-
structure(list(Column1 = structure(c(1L, 3L, 1L, 2L, 3L), .Label = c("ABC", 
"Test1", "XYZ"), class = "factor"), Column2 = structure(c(1L, 
2L, 1L, 3L, 2L), .Label = c("DEF", "PQR", "Test2"), class = "factor"), 
    Column3 = structure(c(1L, 2L, 1L, 3L, 2L), .Label = c("GHI", 
    "LMN", "Test3"), class = "factor"), Column4 = c(5L, 4L, 11L, 
    12L, 54L)), .Names = c("Column1", "Column2", "Column3", "Column4"
), class = "data.frame", row.names = c(NA, -5L))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM