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

在R语言中为数据框列表列添加元素计数列的方法

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

你遇到的错误根源在于:row_number()返回的是一个长度为5的整数向量,而x2[[row_number()]]这种写法试图用整个向量去索引列表的单个位置——列表的[[操作符只接受单个索引值,无法处理向量输入,这就导致了递归索引失败的报错。

这里有几个简单高效的解决方法:

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

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))

方法2:使用base R的sapply()

如果你不想加载purrr包,sapply也能实现同样的效果,它会自动将结果简化为整数向量:

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

方法3:使用rowwise()(适合理解逐行操作逻辑)

如果你想保留类似原思路的逐行处理逻辑,可以用rowwise()让dplyr按行处理数据,此时直接对x2取长度即可:

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

执行后都会得到你想要的输出:

# A tibble: 5 x 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

内容的提问来源于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:53:04