R 正在读取文本文件,该文件为;下一行以“分隔”;

R 正在读取文本文件,该文件为;下一行以“分隔”;,r,import,read.table,R,Import,Read.table,我不知道如何正确表达这个问题,所以我举个例子。 假设我有一个.txt文件,其中第一行是日期,第二行是文本。然后模式重复,第三行是日期,第四行是文本。 如何将其读入R并将其转换为两列dataframe 本质上,我认为它是“下一行分隔符”,不确定这是否是一种正确的描述方式 以下是将保存在.txt文件中的示例数据: .LOG 3:42 PM 12/04/2019 Task 1 3:45 PM 12/04/2019 Task 2 3:55 PM 13/04/2019 Task 3 3:47 PM 15/

我不知道如何正确表达这个问题,所以我举个例子。
假设我有一个
.txt
文件,其中第一行是日期,第二行是文本。然后模式重复,第三行是日期,第四行是文本。 如何将其读入
R
并将其转换为两列
dataframe

本质上,我认为它是“下一行分隔符”,不确定这是否是一种正确的描述方式

以下是将保存在
.txt
文件中的示例数据:

.LOG
3:42 PM 12/04/2019
Task 1
3:45 PM 12/04/2019
Task 2
3:55 PM 13/04/2019
Task 3
3:47 PM 15/04/2019
我希望它看起来像:

DATE                TEXT
3:42 PM 12/04/2019  Task 1
3:45 PM 12/04/2019  Task 2
3:55 PM 13/04/2019  Task 3

使用
Read.table
sep=“\n”
读取文件,这样您就有了单列数据帧

df <- read.table(text = "3:42 PM 12/04/2019
                 Task 1
                 3:45 PM 12/04/2019
                 Task 2
                 3:55 PM 13/04/2019
                 Task 3", sep = "\n")

你可以这样做:

 MessyData <- read.table("Myfile.txt")
 CleanData <- data.frame(DATE = MessyData[seq(1, length(MessyData), by = 2)],
                         TEXT = MessyData[seq(2, length(MessyData), by = 2)])

MessyData这里是使用
matrix
方法的更好选择

as.data.frame(matrix(trimws(df$V1), ncol = 2, byrow = TRUE, 
          dimnames = list(NULL, c("DATE", "TEXT"))))
#               DATE   TEXT
#1 3:42 PM 12/04/2019 Task 1
#2 3:45 PM 12/04/2019 Task 2
#3 3:55 PM 13/04/2019 Task 3
在读取数据集之后

数据
df我不能让这个工作。第一行没有
sep=“\n”
它在扫描时给我一个错误
错误(file=file,what=what,sep=sep,quote=quote,dec=dec,:第6行没有3个元素
。但是一旦我添加
sep=“\n”
并运行第2行,它就会在seq.default中给我错误
错误(2,长度(MessyData),by=2):错误登录“by”参数
是的,这正是我开始尝试读取文件的地方,但在我没有实际拥有文件的情况下,很难解决您在读取文件时遇到的任何问题。:-)至于添加sep=“\n”时仍然会出现的错误,可能是b/c您现在有了data.frame。你想把我答案中的“长度”改为“nrow”。这似乎是一个非常有创意的解决方案。你能解释一下它是如何工作的吗?我知道对于
df[行,列]
。那么对于Row参数,
c(T,F)
为什么起作用呢?我原以为这样做,你需要为每一行说明T/F?Thanks@jmich738
TRUE
/
FALSE
值被循环使用,因此无论行数多少,它都会自动选择备用行。你可以检查
c(1:10)[c(真,假)]
c(1:10)[c(假,真)]
来了解它是如何工作的。我说这可以扩展到任何尺寸df,对吗?换句话说,如果有3列必须使用前3行填写,我将替换
ncol=3
?@jmich738是的,您是对的,并假设这些行是3的倍数
 MessyData <- read.table("Myfile.txt")
 CleanData <- data.frame(DATE = MessyData[seq(1, length(MessyData), by = 2)],
                         TEXT = MessyData[seq(2, length(MessyData), by = 2)])
as.data.frame(matrix(trimws(df$V1), ncol = 2, byrow = TRUE, 
          dimnames = list(NULL, c("DATE", "TEXT"))))
#               DATE   TEXT
#1 3:42 PM 12/04/2019 Task 1
#2 3:45 PM 12/04/2019 Task 2
#3 3:55 PM 13/04/2019 Task 3
df <- read.table("file.txt", sep = "\n")