3

私はフォーラムが初めてで、R は比較的新しいものです。

現在、データを操作しています。データは DataFrame に配置されます。「プライム」列の各行の値を、「ターゲット」列の対応する各行と比較したいと思います。値が一致する場合は、列「一致」の対応する行に値「1」を追加し、一致しない場合は「0」を追加します。

以下は、列の例と「一致」列の下のソリューションです。

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

ifelseandをいじってみましidenticalたが、個々の行や対応する行ではなく、オブジェクト全体を比較します。

一致が行われたかどうかに応じて Match に値を割り当てながら、Prime と Target を比較する方法を誰かが提案できますか?

ありがとうございました。

4

2 に答える 2

4

これは単純な論理テストであるため、2 つの列が等しいかどうかを比較すると、 / が得られますTRUE。これは、 で /に簡単FALSEに変換できます。列のコーディング方法によっては、比較の前に列を文字に変換する必要がある場合があります。10as.numeric()

dat$Match <- as.numeric(dat$Prime == dat$Target)
dat$Match
# [1] 1 1 0
于 2013-08-05T13:17:37.787 に答える
1

ifelseorを使用できます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
于 2013-08-05T14:01:48.907 に答える