如何在R中计算data.table列表列中每个列表的长度(无循环)
计算data.table列表列中每个列表的元素个数(无循环实现)
针对你已经通过str_extract_all提取出包含匹配结果的列表列new_var的场景,以下两种无循环方法可以高效计算每个列表的元素个数:
方法1:使用base R的lengths()函数(推荐)
lengths()是专门为列表设计的向量式长度计算函数,无需循环,性能优异,且无需额外加载包:
# 先模拟你的data.table场景(已包含new_var列) library(data.table) library(stringr) dt <- data.table( text = c( "I agree with you, agree again", "No agreement here", "Agree to disagree", "" ) ) # 生成你的new_var列(不区分大小写提取"agree") dt[, new_var := str_extract_all(text, regex("agree", ignore_case = TRUE))] # 计算每个列表的元素个数,新增count_agree列 dt[, count_agree := lengths(new_var)]
运行后dt会新增count_agree列,对应每个new_var列表的元素数量。
方法2:使用purrr的map_int()
如果你已经在使用tidyverse工具链,也可以用purrr::map_int()实现向量式计算:
library(purrr) dt[, count_agree := map_int(new_var, length)]
这两种方法都是完全无循环的向量化操作,适配data.table的高效数据处理逻辑,不会出现循环带来的性能瓶颈。
内容的提问来源于stack exchange,提问作者user3685724
相关产品推荐
相关产品推荐

