我是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
提前致谢
答案 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)