我有以下数据框(df),对于每个参与者,列"等级"是通过粘贴一些项目的分数来建立的。例如,参与者' a'在一个项目上获得4个,在另一个项目上获得7个,在第三个项目上获得8个请注意,成绩现在是一个角色。另请注意参与者''只有两个分数(假设这是一个与参与者不同的分数' a')。 我需要的是一个新列,它将是每个得分的平均值。所以参与者' a'将有(4 + 7 + 8)/ 3和参与者' b'将有(5 + 9)/ 2。
df = data.frame(participant = c('a', 'b'),
grades= c('478', '58'),
stringsAsFactors = FALSE)
我在这里做了什么
df$mean = sapply(df$grades,
FUN = function(x) strsplit(x, "") %>% .[[1]] %>% as.numeric %>% mean())
它运行良好,但它不是非常易读,更重要的是,它很慢(我有100,000行,所以它需要大约半分钟,我需要多次这样做)。我想知道是否有人有更好的解决方案。也许在tidyverse包或其他包中。