如何从文件中只读取选定的列到R中?(在`read.table`和`scan`之间找到一个平衡点?)

6 浏览
0 Comments

如何从文件中只读取选定的列到R中?(在`read.table`和`scan`之间找到一个平衡点?)

我有一些非常大的分隔数据文件,我想在R中只处理某些列,而不需要花费时间和内存来创建整个文件的数据框。

我所知道的选项只有read.table,但当我只想要几列时,这种方法非常浪费,或者是scan,但对于我想要的功能来说,它似乎太底层了。

是否有更好的选择,无论是纯R还是调用其他shell脚本来进行列提取,然后再使用scan或read.table处理其输出?(这就引出了如何调用shell脚本并在R中捕获其输出的问题)。

0
0 Comments

问题的出现原因:

- `read.table`和`scan`函数在读取大型文件时速度较慢,不够高效。

- 需要从文件中选择性地读取特定列的数据。

解决方法:

- 使用`sqldf()`包将数据加载到sqlite中,然后从中提取所需的数据。

- `sqldf()`包提供了简单的操作方法,可以方便地从sqlite中提取特定列的数据。

在R中只读取选择列的方法是什么?(介于`read.table`和`scan`之间的一种折中方案)

我认为Dirk的方法既简单又快速。我使用的另一种方法是将数据加载到sqlite中,这比`read.table()`快得多,然后只提取你想要的内容。`sqldf()`包使这一切变得非常容易。下面是一个链接,提供了关于`sqldf()`的代码示例。

0
0 Comments

在R中,有时我会使用以下方法来读取一个制表符分隔的文件中的数据:

df <- read.table(pipe("cut -f1,5,28 myFile.txt"))

这样可以让`cut`命令进行数据选择,而且它可以在几乎不使用内存的情况下完成。在这里,我们可以使用`cut`命令来选择数据,因为它不需要使用太多的内存。

另外,也有一种纯R版本的解决方法,可以在`read.table`的`colClasses`参数中使用`"NULL"`来只读取特定的列。可以参考Only read limited number of columns

在一些情况下,我会使用第一个例子中的方法,这种方法非常接近我最终使用的方法。(在我的情况下,由于文件格式不规则,我使用了awk而不是cut命令)。而第二个例子并不完全等同于第一个例子,因为它会创建整个数据框,然后再将其丢弃。当我从一个拥有百万行数据的文件中只想读取10列中的2列时,这会对性能产生很大的影响。

实际上,纯R版本的方法应该是这样的(假设有28列):

mycols <- rep(NULL, 28)
mycols[c(1,5,28)] <- NA
df <- read.table(file, colClasses=mycols)

我刚巧看到了这个问题。看起来,`NULL`需要用引号括起来。

我喜欢提供的解决方案,然而对于`mycols <- rep("NULL", 28)`这种情况,我必须将`NULL`用引号括起来。

如果文件名是存储在R变量中的(因此无法使用固定的"myFile.txt"),该怎么办呢?

在's'的评论中,您可以使用`read.csv`来完成相同的操作:

df <- read.csv(file, colClasses=mycols)

我正在尝试使用`read.table`仅读取列名也包含在向量`labels <- c("a", "b","c"...)`中的向量。我的问题是,我正在读取多个`.txt`文件,并且每个文件中都有向量中的一些标签。是否有一种方法可以使用`read.table`和`%in%`运算符来仅读取与每个`.txt`文件中匹配的标签?

0
0 Comments

R中读取文件的方法有很多种,但是在读取文件时,有时我们只需要选择其中的某些列。这就引发了如何从文件中只读取特定列的问题。下面将介绍这个问题出现的原因以及解决方法。

问题的出现原因是在R中读取文件时,常见的方法有两种:`read.table`和`scan`。但是这两种方法都没有直接支持只读取特定列的功能。因此,我们需要找到一种介于这两种方法之间的解决方案。

解决方法之一是使用`pipe()`函数代替文件名,然后使用类似于`awk`的过滤器从中提取出我们想要的列。具体来说,可以使用`awk`命令来实现这个功能。`pipe()`函数可以将命令行命令作为参数传递给R,并将其结果作为输入数据。通过使用`awk`命令,我们可以在R中读取到我们想要的特定列。

另一种解决方法是使用`read.table()`函数,并在`colClasses`参数中明确指定需要的列。当某一列的`colClasses`的值为NULL时,`read.table()`函数会跳过该列。因此,通过在`colClasses`参数中逐列设置值,我们可以只读取需要的列。

在R中只读取特定列的方法有两种。一种是使用`pipe()`函数和类似于`awk`的过滤器,另一种是使用`read.table()`函数并在`colClasses`参数中明确指定需要的列。这两种方法都是在基本的R环境下实现的,不需要额外的包或工具。

0