合并两个单独的数据集后,我在数据集中有两列。我想将这些列合并到一列BNR.x中。
对于下面列出的案例,我的首选结果将是:
没什么。 BNR.x有数据,没关系
没什么。列中的数据是相同的,这没关系
3.来自BNR.y的数据被复制到BNR.x
没什么。与2.相同
colums中的数据不同。我最好在这一行得到一个额外的列,其中1为FALSE作为警告
6.没有数据。我最好在这里收到警告,并通知我,我没有这个项目的任何数据。
+----+-------+-------+
| ID | BNR.x | BNR.y |
+----+-------+-------+
| 1 | 123 | NA |
| 2 | 234 | 234 |
| 3 | NA | 345 |
| 4 | 456 | 456 |
| 5 | 678 | 677 |
| 6 | NA | NA |
+----+-------+-------+
是否有方法或包可以为我做这个?
答案 0 :(得分: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
答案 1 :(得分: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)
答案 2 :(得分: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
不会工作,因为它会放置&#34;错误地对齐&#34;与BNR $ x NAs对应的BNR $ y值?