查找在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))
代替。
我是 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))
代替。