【发布时间】:2016-02-08 07:33:35
【问题描述】:
【问题讨论】:
-
请勿以图片形式发布您的数据,请了解如何提供reproducible example
标签: r
【问题讨论】:
标签: r
我们可以试试
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)
【讨论】:
你可以的
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"])})
【讨论】: