You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言data frame的列表列中统计每行元素个数并新增列

解决列表列元素个数统计的问题

你遇到的报错是因为在mutate里直接用x2[[row_number()]]的写法不符合向量式操作逻辑——row_number()返回的是一个向量,而[[只能用来提取列表的单个元素,用向量索引就会触发递归层级错误。下面给你几个简单可行的解决方案:

方法1:用purrr::map_int(tidyverse推荐)

purrr包的map_int函数专门用来处理列表,会对列表列的每个元素单独应用length函数,返回整数向量,完美适配mutate的需求:

library(dplyr)
library(purrr)

df <- structure(list(x1 = 1:5, x2 = list(c("a", "b"), c("b", "c", "d"), c("a", "b"), c("a", "b"), c("a", "b"))), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"))

df %>% mutate(x3 = map_int(x2, length))

输出结果:

# A tibble: 5 × 3
     x1 x2        x3
  <int> <list>  <int>
1     1 <chr [2]>    2
2     2 <chr [3]>    3
3     3 <chr [2]>    2
4     4 <chr [2]>    2
5     5 <chr [2]>    2

方法2:用base R的sapply

如果不想加载额外包,base R的sapply也能实现同样效果,它会自动把列表的输出结果简化为向量:

df %>% mutate(x3 = sapply(x2, length))

方法3:用rowwise()按行计算

通过rowwise()把数据按行分组,这样length(x2)就会在每行的上下文里计算单个列表的长度,最后记得用ungroup()取消分组:

df %>% rowwise() %>% mutate(x3 = length(x2)) %>% ungroup()

这三种方法都能得到你想要的结果,其中map_int因为类型明确(返回整数向量),是tidyverse生态里更规范的写法。

内容的提问来源于stack exchange,提问作者AnilGoyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:59:35