将逗号分隔的数字字符串替换为 R 中的中位数

Replace strings of numbers separated by commas with the median in R

我需要帮助替换或提取数字字符串,在我的 df 的每个元素中用逗号分隔,并将其替换为中位数。例如,

a <- c("3, 3, 5, 5", "7, 7, 5, 5", "3, 4, 4, 5", "5, 7")
b <- c("Karina", "Eva", "Jake", "Ana")
df <- data.frame(b,a)

现在我需要用每个元素中包含的那些数字的中位数替换变量 a,如下所示:

        b    a
1 Karina     4
2 Eva        6
3 Jake       4
4 Ana        6

一点点背景。每个数字实际上是属于相应名称的单词的长度。我需要找到每个名字的中值长度,并弄清楚以元音开头的名字是否具有更长的中值长度。因此,例如,从上面我将得出结论,以元音开头的名称长度较短。并使用测试来表明它具有统计显着性。如果有人能以任何方式指导我,我真的很感激!

我们可以在 , 上用 strsplit 拆分 'a' 列,后跟零个或多个空格 (\s*),在 list 上循环,转换为 numeric 并获得 median,将其分配给同一列

df$a <- sapply(strsplit(df$a, ",\s*"), function(x) median(as.numeric(x)))
df$a
#[1] 4 6 4 6

或者用tidyverse,我们可以用separate_rows拆分'a'列并在转换类型的同时扩展行',然后按median分组

library(dplyr)
library(tidyr)
df %>% 
     separate_rows(a, convert = TRUE) %>%
     group_by(b) %>% 
     summarise(a = median(a))