【问题标题】:select rows with unidentical column values using R使用 R 选择具有不同列值的行
【发布时间】:2011-02-21 15:54:22
【问题描述】:

我需要创建一个新的数据框,排除出现在“dam1”和 “dam2”列在同一 fosdate(培养日期)。我试过df <- df[df$dam1!=df$dam2,] 但没有用。 Dam1 和 dam2 是作为母亲身份的因素。

我的 df:

fosdate      dam1     dam2
8/09/2009    2Z523    2Z523
30/10/2009   1W509    5C080
30/10/2009   1W509    5C640
30/10/2009   1W509    1W509
1/10/2009    1W311    63927

我需要获取的新数据框是: dfnew:

fosdate      dam1     dam2
30/10/2009   1W509    5C080
30/10/2009   1W509    5C640
1/10/2009    1W311    63927

不胜感激!

巴松

【问题讨论】:

  • 嗨,Bazon,两个具有相同用户名的不同帐户有效地提出重复的问题是怎么回事? stackoverflow.com/questions/2863316/…
  • 您可能想澄清这个问题是针对什么语言/框架的,就目前而言,这个问题非常模糊。

标签: select r rows


【解决方案1】:

我的猜测是,当你导入数据时,df$dam1 和 df$dam2 变成了因子

您可以使用

进行检查
is.factor(df$dam1)

如果这是真的,那么试试类似的方法

df[as.character(df$dam1) != as.character(df$dam2),]

【讨论】:

  • 正确,除了 != 而不是 ==。
  • 同样,谢谢你!没错 - "!=" 而不是 "=="
【解决方案2】:

问题在于 dam1 和 dam2 是具有不同级别数的因子。为了解决这个问题,您需要将因子转换为“字符”来进行比较。

dfnew <-df[as.character(df$dam1) != as.character(df$dam2), ]

【讨论】:

  • 布莱恩,非常感谢!那成功了。您提供的解释我理解得更好!
  • 正如factor 比较的帮助中的状态适用于因子和字符,所以df[as.character(df$dam1) != df$dam2, ] 也适用。你可以使用subsetsubset(df, as.character(dam1) != dam2)
  • 谢谢马雷克!很高兴知道解决问题的各种方法。它肯定会建立信心!
【解决方案3】:

根据您可能正在使用 R 的想法进行疯狂猜测(因为您的其他问题是关于 R 的)。请注意,我不知道 R,我只是将给出的其他问题和答案中的 2 和 2 放在一起。

试试

df <- df[df$dam1 != df$dam2,]

即在比较子句的两边显式指定 df$。

【讨论】:

  • 我刚刚编辑了上面的问题。使用的语法是 df
  • 为什么是两个账户?我最后才知道这个有用的网站很弱,所以我加入了。我以某种方式退出,无法再次登录我的帐户,我真的很想解决这个问题 - 所以创建了另一个帐户。
  • 您是否尝试过 stackoverflow.com/questions/2854625/… 中提到的子集方式?
  • Sheesh,当有人投票否决您的答案时,您不讨厌它不再相关,因为该问题已根据您的答案进行了编辑?
  • 我很抱歉为什么鸟!第一个语法出现在我最初的问题中是我的错误(在你指出更正之前)。我真诚地为我的错误道歉!
猜你喜欢
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
相关资源
最近更新 更多