gpt4 book ai didi

r - 如何合并与 grep 模式匹配的特定行

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

我有一个数据框如下:

Jen    Rptname   freq

AKT bilb1 23
AKT bilb1 234
DFF bilb22 987
DFF bilf34 7
DFF jhs23 623
AKT j45 53
JFG jhs98 65

我知道如何根据单独的列对整个数据框进行分组,但我如何根据 grep(在本例中为 bilb.* 和 jhs.*)合并单独的行

我希望能够用 bilb* 合并行(因此也将频率加在一起),并用 jhs* 分开行,这样我最终得到

   AKT      bilb       257
DFF bilb 987
DFF bilf34 7
DFF jhs 623
AKT j45 53
JFG jhs 65

这样聚合是由 Jen 和 Rptname 进行的,所以我可以看到每个 Jen 中有多少相同的 Rptname

最佳答案

我们可以使用 grep 获取具有 'bilb' 或 'jhs' 的 'Rptname' 元素的索引,使用 sub 删除数字部分并使用 aggregate 得到 'Rptname' 的 'Freq' 的 sum

indx <- grep('bilb|jhs', df1$Rptname)
df1$Rptname[indx] <- sub('\\d+', '', df1$Rptname[indx])
aggregate(freq~Rptname, df1, FUN=sum)
# Rptname freq
#1 bilb 1244
#2 bilf34 7
#3 j45 53
#4 jhs 688

更新

假设您的数据集是“df2”

 df2$grp <- gsub("([A-Z]+|[a-z]+)[^A-Z]+", "\\1", df2$Rptname)
aggregate(freq~grp+Jen, df2, FUN=sum)

数据

df1 <- structure(list(Rptname = c("bilb1", "bilb1", "bilb22", 
"bilf34",
"jhs23", "j45", "jhs98"), freq = c(23L, 234L, 987L, 7L, 623L,
53L, 65L)), .Names = c("Rptname", "freq"), class = "data.frame",
row.names = c(NA, -7L))

df2 <- structure(list(Jen = c("AKT", "AKT", "AKT", "DFF", "DFF",
"DFF",
"DFF", "DFF", "DFF", "AKT", "JFG", "JFG", "JFG"), Rptname = c("bilb1",
"bilb1", "bilb22", "bilb22", "bilb1", "BTBy", "bilf34", "BTBx",
"jhs23", "j45", "jhs98", "BTBfd", "BTBx"), freq = c(23L, 234L,
22L, 987L, 18L, 18L, 7L, 9L, 623L, 53L, 65L, 19L, 14L)),
.Names = c("Jen",
"Rptname", "freq"), class = "data.frame", row.names = c(NA, -13L))

关于r - 如何合并与 grep 模式匹配的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29476615/

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