Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将列表列添加到数据帧_R_Stringi - Fatal编程技术网

R 将列表列添加到数据帧

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

我有一个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       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])")