2015-07-09 21 views
5

Birden çok satır ve sütun içeren bir excel dosyasına (13232 satır ve 18 sütun) sahibim. Son sütun biraz değer veriyor. Yapmak istediğim şey - sonuncu hariç, aynı sütun ayrıntılarına sahip satırları bulmak ve son sütun değerini belirtmek. Örneğin : girişBirden çok sütunda aynı değerlere sahip satırları birleştir

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

sonra çıktı bu R acheived edilebilir Nasıl

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

olmalıdır olur?

cevap

6

Sen base R

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

Ya

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 

Ya

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 

Ya

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 
den aggregate kullanabilirsiniz

tekrarlanabilir veriler:

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)) 
+0

seni böyle bunu doğrudan agrega kullanabilirsiniz bilmiyordum. Mükemmel. Daha net bir değişken vermen gerektiğini düşündüm. –

+0

@BrandonBertelsen Formül yöntemini veya gösterildiği gibi listeyi kullanabiliriz. Yorumlar için teşekkür ederim – akrun

İlgili konular