我是论坛的新手,对R来说比较新。
我正在操纵我的数据。数据放在DataFrame中。我想将'Prime'列的每一行中的值与'target'列的每个对应行进行比较。如果值匹配,我想将值“1”添加到“匹配”列中的相应行,如果它们不匹配,则添加“0”。
以下是“匹配”列
下列和解决方案的示例Prime Target Match
faces0 faces0 1
faces0 faces0 1
houses1 faces0 0
我使用ifelse
和identical
玩弄了它,但它将对象作为一个整体进行比较,而不是单独和相应的行。
有人可以建议一种比较Prime和Target的方法,同时根据正在进行的匹配为Match分配值吗?
非常感谢你的时间。
答案 0 :(得分:4)
这是一个直接的逻辑测试,所以如果你比较两列的相等性,你会得到TRUE
/ FALSE
,可以很容易地转换为1
/ {{1与0
一起使用。根据列的编码方式,可能需要在比较之前将它们转换为字符:
as.numeric()
答案 1 :(得分:1)
您可以使用ifelse
或match
,但在此之前需要转换为数字。这是解决方案。
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