我想从file1.txt
中选择一部分并将其保存在另一个名为file2.txt
的文件中。
File1.txt:
abc 1 6 a
abc 2 7 b
efg 3 8 c
abc 4 9 d
efg 5 10 e
我要在此处应用的数据库查询是(不是特定于语法的):
file2.txt <- select col2, col3, col4 from file1.txt where col1=abc
File2.txt:
1 6 a
2 7 b
4 9 d
有什么方法可以在R中对文本文件应用数据库类型查询?我知道我们可以使用grep()
函数在.txt文件中搜索字母。但是我找不到任何在线帮助吗?有谁知道我该如何解决我的问题?先感谢您 :)
请不要将此问题标记为重复:
这个问题有所不同。此外,我不能使用sqldf
,因为此软件包不适用于.txt文件。
答案 0 :(得分:1)
以下内容是否有助于回答csvfile中的子集数据?
library(sqldf);
read.csv.sql(file, sql = "select * from file", header = TRUE, sep = ",")
说明 将文件读取到R中,并使用sql语句对其进行过滤。 R仅处理滤波后的部分,因此 可以容纳大于R可以处理的文件。
答案 1 :(得分:1)
这应该是所需要的,记住like()
包中的data.table
在内部使用grepl
,所以我认为正则表达式也是一个选择。
library(data.table)
# Depending on the characteristics of the csv file this call has to be adjusted
dt <- data.table(read.csv("File1.txt", header = FALSE, sep = " "))
# or
dt <- fread("test.txt")
# data.table looks like this after import
dt <- structure(list(V1 = structure(c(1L, 1L, 2L, 1L, 2L)
, .Label = c("abc", "efg")
, class = "factor")
, V2 = 1:5
, V3 = 6:10
, V4 = structure(1:5, .Label = c("a", "b", "c", "d", "e")
, class = "factor")), row.names = c(NA, -5L)
, class = c("data.table", "data.frame"))
write.csv(dt[like(V1, "abc"), .(V2
, V3
, V4
)],file = "File2.txt", row.names = FALSE)
答案 2 :(得分:1)
假设文件在末尾的注释中可重复创建:
library(sqldf)
read.csv.sql("File1.txt",
"select V2, V3, V4 from file where V1 = 'abc'", header = FALSE, sep = " ")
给予:
V2 V3 V4
1 1 6 a
2 2 7 b
3 4 9 d
Lines <- "abc 1 6 a
abc 2 7 b
efg 3 8 c
abc 4 9 d
efg 5 10 e
"
cat(Lines, file = "File1.txt")