【问题标题】:How can I inner join two csv files in R?如何在 R 中内部加入两个 csv 文件?
【发布时间】:2011-08-25 08:39:24
【问题描述】:

我有两个 csv 文件。

文件一有两列:

DD1 abct
DD2 geate
DD3 watec
DD4 wwwca21
DD5 bate789

文件二有一栏:

abct
geate
bate789

我想得到一个截断的文件 1 以包含与文件 2 匹配的文件,即

DD1 abct
DD2 geate
DD5 bate789

您能告诉我如何使用 R 来实现吗?

R 新手。

【问题讨论】:

  • 正确的说法是“内连接”。在标题中称其为“截断”对未来的搜索工作没有帮助。

标签: r csv


【解决方案1】:

首先,读取带有read.table的文件:

file1 <- read.table("file1.csv", col.names=c("FOO", "BAR"))
file2 <- read.table("file2.csv", col.names=c("BAR"))

然后合并它们:

merged <- merge(file1, file2)

并写出结果:

write.table(merged, "merged.csv")

【讨论】:

  • 还有两点:更复杂的操作见:stackoverflow.com/questions/1299871/…
  • 对于非常大的文件,R 可能不是最好的选择,我认为像join(或awk/sed)这样的命令行工具会更快。
【解决方案2】:

这是通过执行 %in% 的直接方法。这将是完全在 R 中最快的方式。

读入文件

datf1 <- read.table("file1.csv") #two column file
datf2 <- read.table("file2.csv") #one column file

选择你想要的行... %in% 创建一个逻辑向量,它是第一个参数的长度,当一个项目在两个参数中时为 TRUE,否则为 FALSE。

datf1 <- datf1[datf1[,2] %in% datf2[,1],]

写出来...我从file1更改了文件名,因为你真的不应该覆盖你的原始数据并创建一个新的file1。

write.table(datf1, "file3.csv", sep = ',', row.names = FALSE, quote = FALSE)

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2017-10-19
    • 2017-10-12
    • 2012-07-31
    • 2022-11-03
    • 1970-01-01
    • 2017-07-09
    相关资源
    最近更新 更多