gpt4 book ai didi

r - 如何在 R 中对相似的行进行分组

转载 作者:行者123 更新时间:2023-12-03 03:00:28 26 4
gpt4 key购买 nike

我有一个表格如下:

   Rptname     Score

Bebo23 8
Bebo22 9
Bebo19 10
Alt88 12
Alt67 11
Jimm 5
Jimm2 7

等等。我想将相似的行分组。即

     Bebo         27
Alt 22
Jimm 12

行名称的开头始终是要分组的相似部分,但相似的字符数可能会有所不同。我很高兴我必须定义组并可能使用某种正则表达式,但我不确定如何在此基础上进行分组和求和。感谢您提前的帮助

最佳答案

您可以使用sub去掉末尾的数字并执行aggregate

do.call(`data.frame`, aggregate(Score~cbind(Rptname=sub('\\d+$', '', 
Rptname)), df, sum))
# Rptname Score
#1 Alt 23
#2 Bebo 27
#3 Jimm 12

或者将transformaggregate结合使用(按照@docendo discimus的建议)

aggregate(Score ~ Rptname, transform(df, Rptname = sub("\\d+$", 
"", Rptname)), sum)

或者带有data.table的选项

library(data.table)
setDT(df)[, .(Score=sum(Score)),
by=list(Rptname=sub('\\d+$','', Rptname))]

或者使用rowsum(由@alexis_laz建议

with(df, rowsum(Score, sub('\\d+$', '', Rptname)))
# [,1]
#Alt 23
#Bebo 27
#Jimm 12

更新

如果分组基于前三个字符,则可以使用 substr

aggregate(Score~Rptname, transform(df, Rptname=substr(Rptname, 1,3)), sum)
# Rptname Score
#1 Alt 23
#2 Beb 27
#3 Jim 12

关于r - 如何在 R 中对相似的行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28123444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com