Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中将两列中的数据合并到一列中_R_Join_Merge - Fatal编程技术网

在R中将两列中的数据合并到一列中

在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 |

在合并两个独立的数据集之后,我在数据集中有两列。我想将这些列合并为一列BNR.x.

对于下面列出的案例,我更喜欢的结果是:
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