【问题标题】:Count of Comma separated values in rr 中逗号分隔值的计数
【发布时间】:2016-02-08 07:33:35
【问题描述】:

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

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

【问题讨论】:

标签: r


【解决方案1】:

我们可以试试

 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)

【讨论】:

    【解决方案2】:

    你可以的

    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),您可以将其分配给您的列。


    如果从数据帧运行此命令,则字符列可能已被解释为一个因素,在这种情况下,将抛出错误 non-character argument。为了解决这个问题,我们需要使用 as.character 函数强制解释为字符向量,将命令更改为
    sapply(strsplit(as.character(frame$subcat_id),","),FUN=function(x){length(x[x!="Null"])})
    

    【讨论】:

    • strsplit(test2$subcat_id, ",") 中的错误:使用您的命令的非字符参数出现错误
    • @Sandy2511 我已经编辑了解决该问题的答案(这是由将列视为一个因素的数据框引起的)。请参阅我的答案末尾的注释。
    • 非常好,感谢您的帮助,您对任务的解释非常棒
    • @Sandy2511 不客气,我很高兴能帮上忙。如果此答案解决了您的问题,请考虑接受。
    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    相关资源
    最近更新 更多