【问题标题】:R: subset columns entries in "df A" to columns entries in "df B" and eliminate if true matchR:将“df A”中的列条目子集到“df B”中的列条目,如果真正匹配则消除
【发布时间】:2012-03-10 13:01:04
【问题描述】:

我是一个 R 初学者,但很难解决以下非常简单的问题; 我有两个数据框(All_df、Bad_df)并想生成第三个这样的 All_df – Bad_df = Good_df

> All_df
Row# Originator Recipient  Date          Time
4    1          6          2000-05-16   16:15:00
7    2          7          2000-05-16   16:25:00
22   2          4          2000-07-04   18:05:00
25   2          9          2000-08-07   05:23:00
10   3          2          2000-06-17   18:07:00
13   4          8          2000-06-21   06:49:00 

> Bad_df
Row# Originator    Recipient       Date     Time
4    2             6         2000-05-16 16:15:00
7    2             7         2000-05-16 16:25:00
22   6             4         2000-07-04 18:05:00
25   12            9         2000-08-07 05:23:00
10   30            2         2000-06-17 18:07:00
13   32            8         2000-06-21 06:49:00 



I want to generate Good_df  similar to this:

> Good_df
Row#    Originator Recipient       Date     Time
4        1         6               2000-05-16   16:15:00
10       3         2               2000-06-17   18:07:00
13       4         8               2000-06-21   06:49:00 

基本上我需要一个函数来搜索 All_df$ Originator 中出现在 Bad_df$ Originator 中的值,在将剩余值返回到 Good_df 之前消除任何匹配项。

我试过了

Good_df <-subset(All_df, Originator %in% Bad_df$Originator) 

但是每个 df 的 nrows 看起来有点不对劲!

> nrow(All_df)
[1] 26,032
> nrow(Bad_df)
[1] 1,452
> nrow(Good_df)
[1] 12,395

任何帮助将不胜感激。

【问题讨论】:

  • 你的意思是Good_df &lt;-subset(All_df, ! Originator %in% Bad_df$Originator)?注意感叹号。
  • @flodel。看起来像一个答案。为什么不发帖?可以评论为什么重复可能对总计问题产生影响。

标签: r match dataframe subset


【解决方案1】:

非常直观,

Good_df <-subset(All_df, Originator %in% Bad_df$Originator)

为您提供不良发起者的 All_df 子集。您想要的是使用 ! 运算符否定您的过滤器以获取好的(或非坏的)发起者的子集:

Good_df <-subset(All_df, ! Originator %in% Bad_df$Originator)

如果您对优先规则感到不舒服,可以添加一组括号:

Good_df <-subset(All_df, !(Originator %in% Bad_df$Originator))

【讨论】:

  • 感谢您澄清这个@flodel。对 nrows 计数问题的原因有何建议?
  • @SeanMc,就像上面提到的@DWin,你的 data.frames 显然有 Originator 的重复值。除了nrow(df),您可能还想查看length(unique(df$Originator)) 以了解全貌。
  • 为所有帮助干杯。我找到了重复的来源,有点愚蠢的错误。 $Originator 和 $Recipient 最初是电子邮件地址,我需要为每个地址生成唯一的标识号,所以我天真地使用了 as.numeric 函数!您能否建议一种为 $Originator 和 $Recipient 中的每个电子邮件地址生成唯一数字标识符的方法,记住任何给定的电子邮件地址都可能在每列中出现多次??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多