2010-05-20 38 views
1

非全列值选择行我需要创建排除出现在“dam1”堤坝和在同一fosdate “dam2”列(培育日期)新的数据帧。我试过df <- df[df$dam1!=df$dam2,]但没有工作。 Dam1和Dam2是母亲身份证的因素。用,使用R

我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

+0

嘿Bazon,有两个不同的帐户有相同的用户名有效地重复问题? http://stackoverflow.com/questions/2863316/selecting-rows-with-unidentical-values-appearing-in-two-different-columns-in-r – whybird 2010-05-20 01:22:19

+0

你可能想澄清这个问题是什么语言/框架,就目前来看,这个问题很模糊。 – David 2010-05-20 01:32:04

回答

3

问题是dam1和dam2都是不同数量级别的因素。为了解决这个问题,你需要将因素转换为“字符”来做比较。

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

这是正确的答案。 – neilfws 2010-05-20 23:22:54

+0

布赖恩,非常感谢!那就是诀窍。我更了解你提供的解释! – Bazon 2010-05-21 00:00:51

+0

因为帮助'因素'比较的国家对于因素和性格起作用,所以'df [as.character(df $ dam1)!= df $ dam2']也适用。你可以使用'subset':'subset(df,as.character(dam1)!= dam2)''。 – Marek 2010-05-21 07:51:07

-1

基础上,你可能会使用R(因为你的其他问题是关于R)的想法胡乱猜测。请注意,我不知道R,我只是将其他问题和答案放在一起。

尝试

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

即specifiy DF $明确的比较条款的两侧。

+0

我刚才编辑了上面的问题。所使用的语法是 DF <-df [DF $ dam1!= DF $ dam2,]。我得到的消息是:在Ops.factor(fosdetail2 $母猪,fosdetail2 $ recipsow)错误: 水平集的因素是不同的。我是R新手,试图抓住我的路! – Bazon 2010-05-20 02:32:47

+0

为什么这两个账号?我来了解这个有用的网站最后的弱点,所以我加入了。我以某种方式注销,无法再次登录到我的帐户,真的想跨越这个问题 - 所以创建了另一个帐户。 – Bazon 2010-05-20 02:38:28

+0

你尝试做它的子集的方式在http://stackoverflow.com/questions/2854625/select-only-rows-if-its-value-in-a-particular-column-is-less-than提到-it-value-in-th/2854856#2854856? – whybird 2010-05-20 02:48:51

0

我的猜测是,当您导入的数据,DF $ dam1和DF $ dam2成了因素

您可以

is.factor(df$dam1) 

检查这如果这是真实的,那么你可以试试

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

正确,除了!=而不是==。 – neilfws 2010-05-20 23:24:26

+0

同样, 也谢谢你!多数民众赞成 - “!=”而不是“==” – Bazon 2010-05-21 00:03:55

+0

啊,谢谢你指出错字 – Sameer 2010-05-21 12:33:31