我正在从文件中读取文本,该文件中的文本用|分隔。 (烟斗)。
文本表如下所示(tweet id |日期和时间| tweet):
545253503963516928|Wed Dec 17 16:25:40 +0000 2014|Massachusetts Pharmacy Owners Arrested in Meningitis Deaths http://xxxxxxxxx
545235402156937217|Wed Dec 17 15:13:44 +0000 2014|For First Time, Treatment Helps Patients With Worst Kind of Stroke, Study Says http://xxxxxxxxx
我正在使用以下代码读取此信息:
nyt <- read.table(file=".../nytimeshealth.txt",
sep="|",
header = F,
quote="",
fill=T,
stringsAsFactors = F,
numerals ="no.loss",
encoding = "UTF-8",
na.strings = "NA")
现在,虽然原始文件中的大多数行都有3列,每行之间都用'|'分隔,但少数行中还有一个附加的'|'分隔器。也就是说,它们有四列,因为某些推文本身包含|
符号。
545074589374881792|Wed Dec 17 04:34:43 +0000 2014|National Briefing | New England: Massachusetts: Sex-Change Surgery Denied to Inmate http://xxxxxxxxx
我知道在上述fill=T
函数中使用read.table
选项可以读取不等长的行(空白字段隐式添加到空单元格中)。
因此,上面的行变为
71 545074589374881792 Wed Dec 17 04:34:43 +0000 2014 National Briefing
72 New England: Massachusetts: Sex-Change Surgery Denied to Inmate http://xxxxxxxxx
但是,现在第71行的第3列具有不完整的信息,而第72行的第2列和第3列为空,而第1列不包含推文ID,而是一部分推文。有什么办法可以避免这种情况吗?我想删除多余的|
分隔符,以免丢失任何信息。
在将文本文件读入R时可以这样做吗?还是在开始加载文本之前我必须要照顾的事情。我最好的做法是什么?
答案 0 :(得分:2)
我创建了一个名为text.txt
的文本文件,其中提供了3行作为数据示例(推文中2条简单行中没有任何|
以及包含{{ 1}}中)。
这是此文件的内容:
|
代码
545253503963516928|Wed Dec 17 16:25:40 +0000 2014|Massachusetts Pharmacy Owners Arrested in Meningitis Deaths http://xxxxxxxxx
545235402156937217|Wed Dec 17 15:13:44 +0000 2014|For First Time, Treatment Helps Patients With Worst Kind of Stroke, Study Says http://xxxxxxxxx
545074589374881792|Wed Dec 17 04:34:43 +0000 2014|National Briefing | New England: Massachusetts: Sex-Change Surgery Denied to Inmate http://xxxxxxxxx
结果
library(tidyverse)
readLines("text.txt", encoding = "UTF-8") %>%
map(., str_split_fixed, "\\|", 3) %>%
map_df(., as_tibble)
答案 1 :(得分:0)
这是另一个解决方案,可以返回您的评论并使用您的初始代码。但是,只有在每个推文中有一个|
的情况下,此解决方案才有效(您可以拥有不包含任何推文的推文,只要至少一条推文中有一个|
)。如果您的推文中没有任何|
,或者某些推文中有多个|
,则它将中断并且您必须对其进行编辑。因此,不管您的推文的结构如何,另一个答案都将是更好的IMO。
我仍在使用text.txt
文件:
df <- read.table(file = "text.txt",
sep = "|",
header = F,
quote = "",
fill = T,
stringsAsFactors = F,
numerals = "no.loss",
encoding = "UTF-8",
na.strings = "NA")
df %>%
mutate(V3 = paste0(V3, V4)) %>%
select(- V4)
结果
V1 V2
1 545253503963516928 Wed Dec 17 16:25:40 +0000 2014
2 545235402156937217 Wed Dec 17 15:13:44 +0000 2014
3 545074589374881792 Wed Dec 17 04:34:43 +0000 2014
V3
1 Massachusetts Pharmacy Owners Arrested in Meningitis Deaths http://xxxxxxxxx
2 For First Time, Treatment Helps Patients With Worst Kind of Stroke, Study Says http://xxxxxxxxx
3 National Briefing New England: Massachusetts: Sex-Change Surgery Denied to Inmate http://xxxxxxxxx