簡體   English   中英

R:如何根據多個列值/字符匯總df中的出現次數?

[英]R: How to aggregate occurrences in df according to multiple column values/characters?

我想根據它們的“單元名稱”(或值)將出現的事件匯總到不同的列中,並將這些值相加。 對於以下第一和第二列中的a1和a2單元格字符的示例數據,應執行此操作。 因此, a1a2應該獲得一個新名稱A ,並且values應該在第三列中匯總。 但是,僅當product相同時才匯總發生次數(第4列)。 如果可能,還可以通過第二個變量作為年份(不在示例中)。 這里是示例數據:

df <- data.frame(from=c("a1", "a2", "C", "C", "D", "a1"),
                 to=c("B", "B", "a1", "a2", "B", "D"),
                 values=sample(1:10,6))
> df
  from to values product
1   a1  B      6       x
2   a2  B      2       x
3    C a1     10       y
4    C a2      2       z
5    D  B      6       w
6   a1  D      3       w

結果應如下所示:

> res
  from to values product
1    A  B      8       x
2    C  A     10       y
3    C  A      2       z
4    D  B      6       w
5    A  D      3       w

請注意,將行1和2合並為A(在[,1]中),並對值求和。 第三行,第四行僅保留為A(在[,2]中),但由於乘積字符不同而未合並(在[,4]中)

有什么建議如何解決這個問題? 謝謝你的想法

嘗試:

library(dplyr)
df %>% 
  group_by(from = toupper(substr(from, 1, 1)), 
           to = toupper(substr(to, 1, 1)), product) %>%
  summarise(values = sum(values))

這使:

#Source: local data frame [5 x 4]
#Groups: from, to [?]
#
#   from    to product values
#  (chr) (chr)  (fctr)  (int)
#1     A     B       x      8
#2     A     D       w      3
#3     C     A       y     10
#4     C     A       z      2
#5     D     B       w      6
df <- data.frame(from=c("a1", "a2", "C", "C", "D", "a1"),
             to=c("B", "B", "a1", "a2", "B", "D"),
             values=c(6,2,10,2,6,3),product = c("x","x","y","z","w","w"))
df$from<-gsub("[[:digit:]]+$", "",as.character(df$from))
df$to<-gsub("[[:digit:]]+$", "",as.character(df$to))
df$from<-toupper(df$from)
df$to<-toupper(df$to)
df<-aggregate(df$values,list(from=df$from,to=df$to,product=df$product),FUN=sum)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM