在R中如何基于现有列表列生成对应子集的新列表列?
基于tidyverse的解决方案
核心逻辑是遍历letter_list列的每个子数据框,提取letter向量后取前3个元素,实现代码如下:
library(tidyverse) # 示例数据生成代码 df <- data.frame(state = c(rep("Alabama", 5), rep("Alaska", 5), rep("Arizona", 5), rep("Arkansas", 5), rep("California", 5)), letter = c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y"), freq = c(8, 7, 4, 3, 1, 19, 15, 7, 4, 2, 10, 6, 3, 2, 2, 11, 10, 10, 5, 4, 50, 33, 22, 11, 1)) df <- nest(df, letter_list = c(letter, freq)) # 新增目标列核心代码 df <- df %>% mutate(top3_letters = map(letter_list, ~ head(.x$letter, 3)))
结果验证
查看第一行(阿拉巴马州)的输出结果:
df$top3_letters[[1]] # 输出:[1] "a" "b" "c"
错误原因说明
之前得到空列表/不符合预期的结果,大概率是遍历过程中没有正确提取letter列:如果直接对letter_list的子数据框调用head(3),得到的是包含前三行的子数据框而非letter向量,自然无法得到预期的元素列表。
内容的提问来源于stack exchange,提问作者Joe North
相关产品推荐
相关产品推荐

