3

2つの別々のデータセットをマージした後、データセットに2つの列があります。これらの列を1つの列BNR.xにマージしたいと思います。

以下にリストされているケースの場合、私の好ましい結果は次のようになります
。1.何もありません。BNR.xにはデータがありますが、それで問題ありません。
2.何もありません。両方の列のデータは同じです、それは問題ありません。
3.BNR.yからのデータがBNR.xにコピーされます。4
。何もありません。2.と同じ
です。5。列のデータが異なります。できれば、この行の警告としてFALSEの1を含む追加の列を取得します。
6.データなし。できれば、このアイテムのデータがないことを通知するために、ここでも警告が表示されます。

+----+-------+-------+
| ID | BNR.x | BNR.y |
+----+-------+-------+
|  1 | 123   | NA    |
|  2 | 234   | 234   |
|  3 | NA    | 345   |
|  4 | 456   | 456   |
|  5 | 678   | 677   |
|  6 | NA    | NA    |
+----+-------+-------+

これを行う方法やパッケージはありますか?

4

3 に答える 3

2

これが提案です。datデータフレームの名前です。

idx <- is.na(dat$BNR.x) # create logical index for NAs in BNR.x

dat$BNR.x[idx] <- dat$BNR.y[idx] # replace NAs with values from BNR.y

# Add a logical column:
dat <- transform(dat, warn = is.na(BNR.x) | (BNR.x != BNR.y & !is.na(BNR.y)))

結果:

  ID BNR.x BNR.y  warn
1  1   123    NA FALSE
2  2   234   234 FALSE
3  3   345   345 FALSE
4  4   456   456 FALSE
5  5   678   677  TRUE
6  6    NA    NA  TRUE
于 2013-02-11T12:58:35.950 に答える
1

データがと呼ばれるデータフレームにある場合はd、次のことができます。

## Copy BNR.y if BNR.x is missing
d$BNR.x[is.na(d$BNR.x)] <- d$BNR.y[is.na(d$BNR.x)]
## List the indices of BNR.x that are still missing
which(is.na(d$BNR.x))
## List the indices where BNR.x is different from BNR.y
which(d$BNR.x != d$BNR.y)
于 2013-02-11T12:50:58.410 に答える
0

から:

df
V1  V2  V3
1  1 123  NA
...

df[which(is.na(df$V2)),]$V2 <- df[which(is.na(df$V2)),]$V3
df$warn <- 0
df[which(is.na(df$V2)),]$warn <- 1
df[which(df$V2 != df$V3 & !is.na(df$V3)),]$warn <- 1

わかりました、それを使いすぎて変換する方がいいですが、どこかから始めなければなりません:)

ps。私は間違っていますか

d$BNR.x[is.na(d$BNR.x)] <- d$BNR.y

BNR $xNAに対応して「誤って整列された」BNR$y値が配置されるため、機能しませんか?

于 2013-02-11T13:25:58.847 に答える