在R中将两列中的数据合并到一列中
在合并两个独立的数据集之后,我在数据集中有两列。我想将这些列合并为一列BNR.x.在R中将两列中的数据合并到一列中,r,join,merge,R,Join,Merge,在合并两个独立的数据集之后,我在数据集中有两列。我想将这些列合并为一列BNR.x. 对于下面列出的案例,我更喜欢的结果是: 1.没有什么。BNR.x有数据,没关系。 2.没有什么。两列中的数据相同,这很好。 3.来自BNR.y的数据被复制到BNR.x 4.没有什么。与2相同。 5.哥伦比亚的数据是不同的。最好在这一行中有一个额外的列,列中有1个FALSE作为警告。 6.没有数据。我最好在这里也得到一个警告,通知我没有此项目的任何数据。 +----+-------+-------+ | ID |
对于下面列出的案例,我更喜欢的结果是:
1.没有什么。BNR.x有数据,没关系。
2.没有什么。两列中的数据相同,这很好。
3.来自BNR.y的数据被复制到BNR.x
4.没有什么。与2相同。
5.哥伦比亚的数据是不同的。最好在这一行中有一个额外的列,列中有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 |
+----+-------+-------+
是否有一种方法或软件包可以为我这样做?如果您的数据位于名为
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)
##如果缺少BNR.x,请复制BNR.y
d$BNR.x[is.na(d$BNR.x)]这里有一个建议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)))
发件人:
df
V1 V2 V3
11123 NA
...
df[which(is.na(df$V2)),]$V2感谢您的帮助,但是当我尝试将缺少的值从y复制到x时,R会出现以下错误:警告消息:在[@Xizam抱歉,我的代码中有一个错误。现在应该可以了。您是对的,d$BNR.y
应该替换为d$BNR.y[is.na(d$BNR.x)]
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
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
d$BNR.x[is.na(d$BNR.x)] <- d$BNR.y