【问题标题】:R, add column to dataframe, count of substringsR,将列添加到数据框,子字符串计数
【发布时间】:2016-01-01 07:10:24
【问题描述】:
这是我想要的输出:
> head(df)
String numSubStrings
1 1 1
2 1 1
3 1;1;1;1 4
4 1;1;1;1 4
5 1;1;1 3
6 1 1
嗨,我有一个数据框,上面有一个“字符串”列。我想添加一列“numSubStrings”,其中包含用“;”分隔的子字符串的数量在“字符串”中。
我试过了
lapply(df, transform, numSubStrings=length(strsplit(df$Strings,";")[[1]]))
这给了我 numSubStrings 中的 1。
请指教。
谢谢。
【问题讨论】:
标签:
r
count
character
substring
calculated-columns
【解决方案1】:
听起来您正在寻找count.fields。用法类似于:
> count.fields(textConnection(mydf$String), sep = ";")
[1] 1 1 4 4 3 1
您可能需要将mydf$String 包装在as.character 中,具体取决于数据的读取或创建方式。
或者,你可以试试lengths:
> lengths(strsplit(mydf$String, ";", TRUE))
[1] 1 1 4 4 3 1
【解决方案2】:
我们可以使用gsub删除除;以外的所有字符,并将;与nchar一起计数
df$numSubStrings <- nchar(gsub('[^;]+', '', df$String))+1
df$numSubStrings
#[1] 1 1 4 4 3 1
或者另一个选项是 stri_count 从 library(stringi) 计算 ; 字符并加 1。
library(stringi)
stri_count_fixed(df$String, ';')+1
#[1] 1 1 4 4 3 1
【解决方案3】:
您可以使用stringr 包中的str_count。
x <- " String
1 1
2 1
3 1;1;1;1
4 1;1;1;1
5 1;1;1
6 1 "
df <- read.table(text=x, header=T)
df$numSubStrings <- str_count(df$String, "[^;]+")
df
# String numSubStrings
# 1 1 1
# 2 1 1
# 3 1;1;1;1 4
# 4 1;1;1;1 4
# 5 1;1;1 3
# 6 1 1