3

我是论坛的新手,对 R 比较陌生。

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

下面是列的示例和“匹配”列下的解决方案

Prime    Target  Match
faces0   faces0   1 
faces0   faces0   1 
houses1  faces0   0

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

任何人都可以建议一种比较 Prime 和 Target 的方法,同时根据是否进行匹配来为 Match 分配一个值?

非常感谢你花时间陪伴。

4

2 回答 2

4

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

dat$Match <- as.numeric(dat$Prime == dat$Target)
dat$Match
# [1] 1 1 0
于 2013-08-05T13:17:37.787 回答
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
于 2013-08-05T14:01:48.907 回答