【问题标题】:I want to copy the rows from one data frame to a new data frame, based on matching numbers?我想根据匹配的数字将行从一个数据帧复制到一个新的数据帧?
【发布时间】:2018-03-19 21:35:46
【问题描述】:
new.df <- as.data.frame(match(unique_numbers$ID, MASTERFILE$ID))

我在一个名为 MASTERFILE 的数据框中有几百万行。它包含一个带有一堆整数的“ID”列。我有另一个名为“unique_numbers”的数据框,其中有一个类似的整数列“ID”,其中包含数字。

我想匹配来自不同数据帧的两个“ID”列,以便将 MASTERFILE 中匹配的 ID 复制到新数据帧“new.df”。

上面的命令似乎有效,但恐怕它只会遍历每个数字,并且 MASTERFILE 可能在不同的行中多次写入相同的 ID,我认为它不会拾取!

【问题讨论】:

  • 每个 ID 的长度是否相同,例如每个 unique_numbers 10 个匹配到 10 个匹配主文件 ID?
  • 你好安德鲁。不,MASTERFILE 包含几百万行,每行在 ID 列中都有一个 ID。不过,有些行可能具有相同的 ID。 unique_numbers 数据框只包含几个 ID。

标签: r


【解决方案1】:

你可以使用%in%

new.df <- MASTERFILE[MASTERFILE$ID %in% unique_numbers$ID, ];

或者如果您希望 new.df 仅包含 ID 列:

new.df <- MASTERFILE[MASTERFILE$ID %in% unique_numbers$ID, "ID"];

【讨论】:

  • 谢谢,效果很好。你能解释一下最后的分号是什么意思吗?
  • @Woels 可以省略分号;这是个人习惯/偏好;如果一行中有多个语句(这通常是不好的做法),则只需要一个分号,例如x &lt;- 2; x + 1.
【解决方案2】:

很难看到没有示例(欣赏它的数百万行),即使是样本数据也会很好。

这可能有用吗?

# dummy data different ID lengths
unique_numbers <- rep(1:1000,each=10)
master_id <- rep(1:2000,each=20)
# subset the ones that match
new.df <- subset(master_id , master_id %in% unique_numbers)

或根据您的具体情况:

new.df <- subset(MASTERFILE$ID, MASTERFILE$ID %in% unique_numbers$ID)

【讨论】:

  • 谢谢。我得深入挖掘一下 %in% 函数,看起来很有用!
猜你喜欢
  • 1970-01-01
  • 2013-02-24
  • 2021-04-03
  • 2022-10-23
  • 2023-03-25
  • 1970-01-01
  • 2021-05-12
  • 2016-08-16
  • 1970-01-01
相关资源
最近更新 更多