将两列中的数据连接到R中的一列中

时间:2013-02-11 12:42:32

标签: r join merge

合并两个单独的数据集后,我在数据集中有两列。我想将这些列合并到一列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    |
+----+-------+-------+

是否有方法或包可以为我做这个?

3 个答案:

答案 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值?