1

我需要帮助替换或提取数字字符串,在我的 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

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

4

1 回答 1

1

我们可以用strspliton,后跟零个或多个空格 ( \\s*) 拆分“a”列,遍历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))
于 2020-07-01T21:24:44.660 回答