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

时间:2016-02-03 04:57:06

标签: r string character paste

我是R的新手,我有一个方案来计算R中用逗号分隔的每个字符串的长度。

我有一个以下数据框,其中有一个列值。我要找出用逗号分隔的此列中每个单元格的长度。 我知道这与paste有关。但是不能让它运作

ex: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

提前致谢

4 个答案:

答案 0 :(得分:2)

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

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

如果它们是因素,请改用textConnection(as.character(DF$Values))

答案 1 :(得分:1)

你可以做到

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

答案 2 :(得分:0)

使用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] 

答案 3 :(得分:0)

我们可以使用gsub

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

根据重复链接中的基准,与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)