查找在R中以逗号分隔的字符串的长度

Finding length of a character string which is separated by commas in R

我是 R 的新手,我有一个场景可以计算 R 中用逗号分隔的每个字符串的长度。

我有一个以下数据框,其中有一列值。我要找出此列中用逗号分隔的每个单元格的长度。 我知道这与 paste 有关。但无法正常工作

例如:DF$Values {16337, 21518, 26598, 30461} {16337, 21518, 26598, 30461,234,836,23} {123,444,16337, 21518, 26598, 30461}

我想要结果作为具有 2 列的数据框。 DF$Length 应该给出列值的长度

DF$Values, DF$Length {16337, 21518, 26598, 30461} , 4 {16337, 21518, 26598, 30461,234,836,23}, 7 {123,444,16337, 21518, 26598, 30461}, 6

提前致谢

你可以做到

DF$Length <- sapply(gregexpr(",",DF$Values), length) + 1

一个使用data.table的解决方案是:

library(data.table)
df <- data.table(values=c("{16337, 21518, 26598, 30461}", "{16337, 21518, 26598, 30461,234,836,23}", "{123,444,16337, 21518, 26598, 30461}"))
df[, lengthVal:= length(unlist(strsplit(values(.I), split=","))), by=values] 

我们可以使用gsub

nchar(gsub('[^,]', '', DF$Values)) +1L
#[1] 4 7 6

根据重复 link 中的基准,gsub 方法比 count.fields 更快。如果我们需要更快的方法

library(stringi)
stri_count_fixed(DF$Values, ",") + 1
#[1] 4 7 6

数据

DF <- data.frame(Values = c("16337, 21518, 26598, 30461", 
  "16337, 21518, 26598, 30461,234,836,23", 
    "123,444,16337, 21518, 26598, 30461"), stringsAsFactors=FALSE)

使用@akrun 的示例数据,这是我在评论中提到的 count.fields 方法。

> count.fields(textConnection(DF$Values), sep = ",")
[1] 4 7 6

如果是因子,就用textConnection(as.character(DF$Values))代替。