R语言 从列表中计数值[重复]

zed5wv10  于 2023-05-11  发布在  其他
关注(0)|答案(2)|浏览(164)

此问题已在此处有答案

Count values separated by a comma in a character string(5个答案)
昨天关门了。
我有一个列,它的观察结果是字符类型,并按如下方式组织(输出示例如下):

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"]'
))

我的目标是计算每个观察的每个列表中的元素数量(考虑到列表中这些元素之间用逗号分隔)。我试着把它转换成一个因子,一个列表,我用了长度和长度,还有很多我不记得的东西。有人知道如何解决这个问题吗?

8cdiaqws

8cdiaqws1#

我们可以使用str_count()来计算元素:
在这里,我们计算,并加1以获得元素的计数:

library(dplyr)
library(stringr)

df %>%
  mutate(n_elements = str_count(observation, ",")+1)
jobtbby3

jobtbby32#

这是一个基本的R解决方案。

m <- gregexpr(",", df$observation)
lengths(m) + 1L
#> [1] 8 8 8

创建于2023-05-06使用reprex v2.0.2
还是那句俏皮话

lengths(strsplit(df$observation, ","))
#> [1] 8 8 8

创建于2023-05-06使用reprex v2.0.2
但这会在计数之前创建一个列表,这需要更多的内存,速度也更慢。也许第一个解决方案重写为一行程序:

lengths(gregexpr(",", df$observation)) + 1L

相关问题