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
这是我想要的输出:
> 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