R 将列表列添加到数据帧
我有一个100行的数据框 我在dataframe中有一个由文本组成的列。 我想把文本列分成几个句子,这样文本列就成了一个句子列表。 我正在使用stringi软件包功能进行拆分R 将列表列添加到数据帧,r,stringi,R,Stringi,我有一个100行的数据框 我在dataframe中有一个由文本组成的列。 我想把文本列分成几个句子,这样文本列就成了一个句子列表。 我正在使用stringi软件包功能进行拆分stri_split_line 示例: rowID text 1 There is something wrong. It is bad. We made it better 2 The sky is blue. The sea is green. 所需输出 rowID
stri_split_line
示例:
rowID text
1 There is something wrong. It is bad. We made it better
2 The sky is blue. The sea is green.
所需输出
rowID text
1 [1] There is something wrong
[2]It is bad.
[3]We made it better
2 [1]The sky is blue.
[2]The sea is green.
我已经试过了
dataframe<-do.call(rbind.data.frame, stri_split_lines(dataframe$text, omit_empty = TRUE))
dataframe示例:
dataframe[["text"]] <- strsplit(dataframe[["text"]], split = "\\.")
str(dataframe)
'data.frame': 2 obs. of 2 variables:
$ rowID: int 1 2
$ text :List of 2
..$ : chr "There is something wrong" " It is bad" " We made it better"
..$ : chr "The sky is blue" " The sea is green"
dataframe[[“text”]示例:
dataframe[["text"]] <- strsplit(dataframe[["text"]], split = "\\.")
str(dataframe)
'data.frame': 2 obs. of 2 variables:
$ rowID: int 1 2
$ text :List of 2
..$ : chr "There is something wrong" " It is bad" " We made it better"
..$ : chr "The sky is blue" " The sea is green"
dataframe[[“text”]]这是tidyverse提供的解决方案(不再使用stringi
):
假设您的数据帧被称为df
解决方案
library(dplyr)
df %>%
mutate(text= strsplit(text, "(?<=[[:punct:]])\\s(?=[A-Z])", perl=T))
在原始数据帧上使用tidyr::分隔_行
(在创建列表列之前):
df%>%tidyr::分隔_行(text,sep=“(?这是一个来自tidyverse的解决方案(不再使用stringi
):
假设您的数据帧被称为df
解决方案
library(dplyr)
df %>%
mutate(text= strsplit(text, "(?<=[[:punct:]])\\s(?=[A-Z])", perl=T))
在原始数据帧上使用tidyr::分隔_行
(在创建列表列之前):
df%>%tidyr::sep=“(?请与dput()
共享数据。请与dput()
共享数据。谢谢@snoram。行尾不总是有句号,这就是我想使用stri\u split\u行的原因。我不确定为什么输出不能直接发送到数据帧,尽管stri\u split\u行(dataframe$text,omit_empty=TRUE)
不拆分字符串…我想这可能是问题所在..我很困惑。它应该拆分字符串,当我运行它而不尝试将其归还给自身时,它会输出列表,如上所述。它基于新行字符拆分字符串,而不是“.”因此,如果您向字符串中添加新行,它将实际拆分它们。或者,如果您能够计算出需要的正则表达式,您可以使用stri\u split\u regex
。stri\u split\u lines()
根据文本所在的行进行拆分,而不是根据句子进行拆分。谢谢@snoram。行尾不总是有句号,这就是我想使用stri_split_行的原因。我不确定为什么输出不能直接发送到数据框,尽管stri_split_行(dataframe$text,省略_empty=TRUE)
不拆分字符串…我想这可能是问题所在..我很困惑。它应该拆分字符串,当我运行它而不尝试将其归还给它自己时,它会输出列表,上面有as。它根据新行字符拆分字符串,而不是“.”因此,如果你在字符串中添加新行,它实际上会将它们拆分。或者,如果你能算出你需要的正则表达式,你可以使用stri\u split\u regex
。stri\u split\u lines()
根据文本所在的行拆分,而不是根据句子拆分。
df %>% tidyr::separate_rows(text, sep= "(?<=[[:punct:]])\\s(?=[A-Z])")