我有一个数据框,如下所示:

Symptom                                          number

Abdominal pain\n Swallowing probs\n Back issues\n       22
Abdominal pain\n                                        12
Back issues \n Vomiting \n                                 14
Back issues\n                                            5

每个症状短语的末尾总是有一个\n。症状短语本身可以是任何东西,因此我不想专门搜索这些术语,而可以搜索\n之前(或之间)的任何术语

我想平均每种症状的number,以便最终得到:
Symptom                       Avg
Abdominal pain                 17
Swallowing probs               22
Back issues                    20.5
Vomiting                       14

我不知道如何根据dplyr的各个术语进行分组。我努力了
SypmAvg<- df %>% group_by(grepl("(?\\n.*\\n)|($.*?\\n)",df$Symptom)%>% summarise(mean=mean(number)

但是它只是使我的计算机崩溃,所以我什至看不到错误。有人可以帮忙吗?仅仅是正则表达式问题,还是有更好的方法来做到这一点?

最佳答案

我们可以使用cSplit

library(splitstackshape)
cSplit(df, "Symptom", "\\n", "long")[, .(Avg = mean(number)), .(Symptom)]

10-04 23:11