我的大部分统计分析都使用 R。但是,清理/处理数据,尤其是处理 1Gb+ 大小的数据时,非常麻烦。所以我为此使用了常见的 UNIX 工具。但我的问题是,是否可以在 R session 中间以交互方式运行它们?一个例子:让我们说 file1
是来自 R 进程的输出数据集,有 100 行。由此,对于我的下一个 R 过程,我需要第 1 列和第 2 列的特定子集,file2
,可以通过 cut
轻松提取和 awk.
所以工作流程是这样的:
Some R process => file1
cut --fields=1,2 <file1 | awk something something >file2
Next R process using file2
如果这是一个愚蠢的问题,请提前道歉。
最佳答案
试试这个(如果需要,添加其他 read.table
参数):
# 1
DF <- read.table(pipe("cut -fields=1,2 < data.txt| awk something_else"))
或在纯 R 中:
# 2
DF <- read.table("data.txt")[1:2]
或者甚至不读取不需要的字段,假设有 4 个字段:
# 3
DF <- read.table("data.txt", colClasses = c(NA, NA, "NULL", "NULL"))
对于我们知道我们想要前两个字段但不知道还有多少其他字段的情况,可以修改最后一行:
# 3a
n <- count.fields("data.txt")[1]
read.table("data.txt", header = TRUE, colClasses = c(NA, NA, rep("NULL", n-2)))
可以使用 sqldf 包。在这个例子中,我们假设一个 csv 文件,
data.csv
并且所需的字段称为 a
和 b
.如果它不是 csv 文件,则对 read.csv.sql
使用适当的参数指定其他分隔符等:# 4
library(sqldf)
DF <- read.csv.sql("data.csv", sql = "select a, b from file")
关于r - 将其他语言与 R 混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892319/