![](/img/trans.png)
[英]R: How to aggregate (and sum up) rows in df according to multiple column criteria and keep previous order?
[英]R: How to aggregate occurrences in df according to multiple column values/characters?
我想根據它們的“單元名稱”(或值)將出現的事件匯總到不同的列中,並將這些值相加。 對於以下第一和第二列中的a1和a2單元格字符的示例數據,應執行此操作。 因此, a1
和a2
應該獲得一個新名稱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.