R,将列添加到数据框,子字符串计数

R, add column to dataframe, count of substrings

这是我想要的输出:

> 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

你好,我有一个数据框,上面有一个 "String" 列。我想添加一列 "numSubStrings",其中包含由“;”分隔的子字符串数在 "String".

我试过了

lapply(df, transform, numSubStrings=length(strsplit(df$Strings,";")[[1]]))

它在 numSubStrings 中给了我 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

我们可以用gsub去掉除;以外的所有字符,把;算作nchar

df$numSubStrings <- nchar(gsub('[^;]+', '', df$String))+1
df$numSubStrings
#[1] 1 1 4 4 3 1

或者另一个选项是 library(stringi) 中的 stri_count 来计算 ; 个字符并加 1。

library(stringi)
stri_count_fixed(df$String, ';')+1
#[1] 1 1 4 4 3 1

您可以使用 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