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

如何统计R数据框中字符型列表格式观测值的元素数量?

问题描述

我有一个字符类型的列,观测值格式如下(示例代码):

df <- data.frame(observation = c('["Extra pillows and blankets", "Dishes and silverware", "Room-darkening shades", "Hot water kettle", "Ethernet connection", "Wifi", "Dedicated workspace", "Oven"]',
                                 '["Extra pillows and blankets", "Dishes and silverware", "Room-darkening shades", "Hot water kettle", "Ethernet connection", "Wifi", "Dedicated workspace", "Oven"]',
                                 '["Extra pillows and blankets", "Dishes and silverware", "Room-darkening shades", "Hot water kettle", "Ethernet connection", "Wifi", "Dedicated workspace", "Oven"]'
))

我的目标是统计每个观测值中列表的元素数量(以列表中的逗号作为分隔符)。尝试过转换为因子、列表,使用length和lengths函数等方法,都没能解决问题,请问该如何处理?

解决方案

方法1:JSON解析(最可靠)

你的观测值是标准JSON数组格式,用JSON解析工具转成列表后统计长度是最稳妥的方式,推荐使用jsonlite包:

# 未安装包时先执行:install.packages("jsonlite")
library(jsonlite)

# 解析字符串为列表,统计每个列表的元素数
df$element_count <- lengths(fromJSON(df$observation, simplifyVector = FALSE))

示例中每个观测值会返回结果8,完全匹配实际元素数量。

方法2:字符串处理(无需额外包)

如果不想依赖第三方包,可通过字符串操作实现:

# 用基础R函数实现
df$element_count <- sapply(df$observation, function(x) {
  # 去除首尾的方括号
  cleaned_str <- substr(x, 2, nchar(x)-1)
  # 按`", "`分割后统计元素长度
  length(strsplit(cleaned_str, '", "')[[1]])
})

或者用stringr包简化操作:

# 未安装包时先执行:install.packages("stringr")
library(stringr)

# 去除首尾括号后统计逗号分隔符数量,加1得到元素数
df$element_count <- str_count(str_remove_all(df$observation, "^\\[|\\]$"), '", "') + 1

⚠️ 注意:字符串处理方法依赖格式完全固定,如果元素本身包含", "这类字符,会导致统计错误,优先推荐JSON解析法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:38:11