【问题标题】:How to Split Text Within DataFrame如何在 DataFrame 中拆分文本
【发布时间】:2019-09-24 20:14:54
【问题描述】:

你能帮我将第 1 列(原始文本)中的数据分隔为

第 2 列(名称), 第 3 列(时间戳), 第 4 列(语音文本)?

数据如下:


    column 1                                                         column 2
[1] firstname Lastname:           00:01     text text. text.          0
[2] firstname lastname2:          00:008    text, text text.          0

我需要它看起来像

column1                     column 2      colum3

[1] Firstname lastname      00:01         text text. text.
[2] firstname lastname2     00:08         text, text text.

【问题讨论】:

标签: r nlp


【解决方案1】:

如果我理解正确,OP 有一个 data.frame,其中第一列应该分成三个单独的列。列由 4 个或更多空白字符分隔。

data.table 包具有tstrsplit() 函数,它是transpose(strsplit(...)) 的缩写:

library(data.table)
setDT(df)[, c("name", "timestamp", "speech_text") := tstrsplit(column1, "\\s{4,}")]
df
                                                    column1 column2                 name timestamp      speech_text
1: firstname Lastname:           00:01     text text. text.       0  firstname Lastname:     00:01 text text. text.
2: firstname lastname2:          00:008    text, text text.       0 firstname lastname2:    00:008 text, text text.

请注意,新列已附加到原始 data.frame df就位

另请注意,tstrsplit() 默认已将 column1 从因子强制转换为字符。

数据

df <- data.frame(
  column1 = c("firstname Lastname:           00:01     text text. text.", 
              "firstname lastname2:          00:008    text, text text."),
  column2 = 0)
df
                                                   column1 column2
1 firstname Lastname:           00:01     text text. text.       0
2 firstname lastname2:          00:008    text, text text.       0

【讨论】:

    【解决方案2】:

    您可以使用 strsplit 和 regex 一起查找 3 个以上的空格。

    #Replication of the dataframe
    l1 = "firstname Lastname:           00:01     text text. text.          0"
    l2 = "firstname lastname2:          00:008    text, text text.          0"
    df = rbind(l1,l2)
    
    # Using strsplit with Regex to find separation with 3 or more spaces.
    
    df2=as.data.frame(matrix(unlist(strsplit(df,"\\s{3,}")),nrow = nrow(df), byrow=T),stringsAsFactors = F)
    

    Strplit 生成一个列表,因此需要取消列表并使用矩阵重新创建数据框。

    输出是:

    +----------------------+--------+------------------+----+
    |          V1          |   V2   |        V3        | V4 |
    +----------------------+--------+------------------+----+
    | firstname Lastname:  | 00:01  | text text. text. |  0 |
    | firstname lastname2: | 00:008 | text, text text. |  0 |
    +----------------------+--------+------------------+----+
    

    【讨论】:

    • 谢谢!但是,我收到此错误: strsplit(df, "\\s{3,}") 中的错误:非字符参数
    • 在我的例子中 df 是一个字符。在您的示例中似乎 df 是一个数据框,因此在 strsplit 中您需要指出您要使用哪一列,例如 strplit(df$V1,"\\s{3,}")
    猜你喜欢
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 2015-04-11
    • 1970-01-01
    • 2021-10-04
    • 2019-01-10
    相关资源
    最近更新 更多