首页 > 解决方案 > R根据数值和单词对字符串进行分组

问题描述

我有一个数据集,其中包含名称作为带有年份、顺序和分组名称的字符串。每个名称都有一个与名称关联的值。我需要根据每个分组名称的升序年份/顺序对“名称”重新排序,并分配一个值,该值是组内的平均值。

我的问题因为一些名字说拼写名字而不是使用数字而变得更加复杂。例如:“2020 Mid 1st Rounder”相当于“2020 1.05-1.08 Draft Pick”。

这是我的数据框的示例:

Data <- data.frame(Value = c(1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,5),
 Name = c("2020 1.01 Draft Pick", "2020 1.04 Draft Pick", "2020 1.02 Draft Pick", "2020 1.03 Draft Pick",
"2020 1.06 Draft Pick","2020 1.04 Draft Pick","2020 1.05 Draft Pick","2020 1.04 Draft Pick",
"2020 Mid 1st Rounder","2020 1.04 Draft Pick","2020 1.08 Draft Pick","2020 1.03 Draft Pick",
"2020 Last Round","2020 1.04 Draft Pick","2020 1.07 Draft Pick","2020 Early 1st Rounder"))

我唯一能想到的需要进行大量手动更改 (str_replace("1.05", "Mid 1st Rounder", Names)),然后拆分字符串以重新排序,我知道必须有更好的方法。谢谢!

编辑:使用@Akrun 的方法,这是我得到的输出: 使用@Akrun 方法的输出图像。 这与我需要的非常接近,但我希望将平均值按 (1.01-1.04&Early 1st Round)、(1.05-1.08&Mid 1st Round)、(1.09-1.12 &Last 1st Round)、(2.01-2.04&Early 2nd Round) 分组) , &ETC。

我使用的确切代码是:

temp <- Output_table[!(Output_table$`Draft Pick.Name`==""), c('Player.Value', 'Draft Pick.Name')] %>%
  group_by('Player.Value', year = readr::parse_number(as.character(`Draft Pick.Name`))) %>% 
  mutate(averagePergroup = mean(as.numeric(str_replace(`Player.Value`, "^\\d+\\s+([0-9.]+)\\s+.*", "\\1")), na.rm = TRUE))

标签: rstringsortingnumeric

解决方案


推荐阅读