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

标签 r grouping

我有一个表格如下:

   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/

相关文章:

r - 运行代码期间 R 中的内存使用情况

python - Pandas 按时间戳和 id 分组并计数

apache-pig - 在 PIG 脚本中连接不同记录

regex - 查找第三次出现的特殊字符并删除 R 中之前的所有内容

r - 使用 R 中的 Statnet 进行加权网络中的中心性测量

r - R 中的网页抓取, "... does not exist in current working directory"错误

r - 绘图编织错误: "unable to start png() device"

python - 使用 pandas dataframe,如何按多列分组并添加新列

MySQL,GROUP BY 中的过滤器

JavaScript:按一个键对项目进行分组,按另一个键对(!)组内的项目进行排序 - 怎么样?