首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R扫描两列并保持唯一

R扫描两列并保持唯一
EN

Stack Overflow用户
提问于 2013-02-11 17:39:23
回答 1查看 1.3K关注 0票数 2

我有一个以制表符分隔的数据文件,其中有四列,我希望读取R中的前两列,并且只保留唯一的两列对作为data.frame。文件可以在数百万行中:

代码语言:javascript
运行
复制
cluster-1    3    12412341324    13412341234
cluster-1    3    62626662346    54234524354
cluster-1    3    45454345354    45454544545
cluster-2    644  12332234341    37535473475
cluster-2    644  54654365466    56565634543
cluster-2    644  56356356536    35634563456
...
cluster-9999999    123    123412341241    143132423
...

我想使用scan (或任何更好的选择)来读取该文件,并最终得到一个具有以下内容的data.frame

代码语言:javascript
运行
复制
cluster-1    3
cluster-2    644
cluster-3    343
...
cluster-9999999    123

在R中读取这么大的文件最省时的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-11 17:56:26

:如果您知道列数,比如说5列,并且您想要前两列(或者只有几列),那么可以使用read.table中的colClasses来完成这项工作

代码语言:javascript
运行
复制
# header here is set to false because I don't see one in your file
df <- read.table("~/file.txt", header = FALSE, 
              colClasses=c("character", "numeric", "NULL", "NULL", "NULL"))

在这里,我们将第3到5列设置为NULL,以便跳过它们。

未知列/大量列:如果您不知道列或列太多,另一种方法是使用带有awkpipe (或带有cutpipe ),首先使用所需的列过滤文件,然后使用read.table加载文件

代码语言:javascript
运行
复制
# header here is set to false because I don't see one in your file
df <- read.table(pipe("awk '{print $1\"\t\"$2}' ~/file.txt"), 
                       header = FALSE, sep = "\t")

删除重复的行:使用duplicated from base作为:

代码语言:javascript
运行
复制
df <- df[!duplicated(df), ]
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14809407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档