如何在DataFrame中拆分文本
你能帮我把第1列(rawtext)中的数据划界到 第2栏(名称), 第3列(时间戳), 第4栏(演讲稿) 数据如下所示:如何在DataFrame中拆分文本,r,nlp,R,Nlp,你能帮我把第1列(rawtext)中的数据划界到 第2栏(名称), 第3列(时间戳), 第4栏(演讲稿) 数据如下所示: column 1 column 2 [1] firstname Lastname: 00:01 text text. text. 0 [2] firstname lastname2: 00:0
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.
可以使用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 |
+----------------------+--------+------------------+----+
如果我理解正确,OP有一个data.frame,它的第一列应该被分成三个独立的列。列由4个或更多空格字符分隔
data.table
包具有tstrsplit()
函数,它是转置(strsplit(…)
的缩写:
请注意,新列已附加到原始data.framedf
中
还请注意,默认情况下,tstrsplit()
已将column1
从因子强制转换为字符
资料
可能的副本谢谢!但是,我收到了这个错误:strsplit(df,“\\s{3,}”)中的错误:非字符参数在我的示例中,df是一个字符。在您的示例中,df似乎是一个数据帧,因此在strsplit中,您需要指示您使用的列,例如strplit(df$V1,“\\s{3,}”)
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.
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