r中逗号分隔值的计数

时间:2016-02-08 07:33:35

标签: r

我有一个名为 subcat_id 的列,其中的值存储为逗号分隔列表。我需要计算值的数量并将计数存储在新列中。这些列表也有我想要删除的Null值。

Example

我想将计数存储在 n 列中。

2 个答案:

答案 0 :(得分:2)

我们可以尝试

 nchar(gsub('[^,]+', '', gsub(',(?=,)|(^,|,$)', '', 
      gsub('(Null){1,}', '', df1$subcat_id), perl=TRUE)))+1L
 #[1] 6 4

或者

library(stringr)
str_count(df1$subcat_id, '[0-9.]+')
#[1] 6 4

数据

 df1 <- data.frame(subcat_id = c('1,2,3,15,16,78', 
        '1,2,3,15,Null,Null'), stringsAsFactors=FALSE)

答案 1 :(得分:1)

你可以做到

sapply(strsplit(subcat_id,","),FUN=function(x){length(x[x!="Null"])})

strsplit(subcat_id,",")将返回逗号分区中 subcat_id 中每个项目的列表。 sapply会将指定的函数应用于此列表中的每个项目,并返回结果的向量。

最后,我们应用的函数将只接受每个列表项中的非空条目,并计算生成的子列表。

例如,如果我们有

subcat_id <- c("1,2,3","23,Null,4")

然后运行上面的代码会返回c(3,4),您可以将其分配给列。

<小时/> 如果从数据帧运行此字符,则可能已将字符列解释为因子,在这种情况下,将抛出错误非字符参数。要解决这个问题,我们需要强制解释为as.character函数的字符向量,将命令更改为

sapply(strsplit(as.character(frame$subcat_id),","),FUN=function(x){length(x[x!="Null"])})