比较单个行中的值与不同列中的相应行

时间:2013-08-05 13:09:40

标签: r match rows

我是论坛的新手,对R来说比较新。

我正在操纵我的数据。数据放在DataFrame中。我想将'Prime'列的每一行中的值与'target'列的每个对应行进行比较。如果值匹配,我想将值“1”添加到“匹配”列中的相应行,如果它们不匹配,则添加“0”。

以下是“匹配”列

下列和解决方案的示例
Prime    Target  Match
faces0   faces0   1 
faces0   faces0   1 
houses1  faces0   0

我使用ifelseidentical玩弄了它,但它将对象作为一个整体进行比较,而不是单独和相应的行。

有人可以建议一种比较Prime和Target的方法,同时根据正在进行的匹配为Match分配值吗?

非常感谢你的时间。

2 个答案:

答案 0 :(得分:4)

这是一个直接的逻辑测试,所以如果你比较两列的相等性,你会得到TRUE / FALSE,可以很容易地转换为1 / {{1与0一起使用。根据列的编码方式,可能需要在比较之前将它们转换为字符:

as.numeric()

答案 1 :(得分:1)

您可以使用ifelsematch,但在此之前需要转换为数字。这是解决方案。

mydata<-structure(list(Prime = structure(c(1L, 1L, 2L), .Label = c("faces0", 
"houses1"), class = "factor"), Target = structure(c(1L, 1L, 1L
), .Label = "faces0", class = "factor"), Match = c(1, 1, 0)), .Names = c("Prime", 
"Target", "Match"), row.names = c(NA, -3L), class = "data.frame")

> mydata$Match<-with(mydata,ifelse(as.numeric(Prime)==as.numeric(Target),1,0))
> mydata
    Prime Target Match
1  faces0 faces0     1
2  faces0 faces0     1
3 houses1 faces0     0

mydata$Match<-with(mydata,match(as.numeric(Prime),as.numeric(Target),nomatch=0))
 > mydata
        Prime Target Match
    1  faces0 faces0     1
    2  faces0 faces0     1
    3 houses1 faces0     0