用 R 中另一个数据的值替换一个数据中的 NA?
Replace NA in one data by the value of another data in R?
我有两个数据集,data1
没有 NA
但 data2 有 NA
。我想用data1中的相应值替换data2中的NA。
dput(data1)
structure(list(X1 = c(4, 7, 8, 4, 5), X2 = c(2, 1, 1, 2, 1),
X3 = c(1, 2, 2, 1, 2)), class = "data.frame", row.names = c(NA,
-5L))
> data1
X1 X2 X3
1 4 2 1
2 7 1 2
3 8 1 2
4 4 2 1
5 5 1 2
> dput(data2)
structure(list(X1 = c(10, NA, 9, 8, NA), X2 = c(3, 2, 2, NA,
1), X3 = c(4, 3, NA, 5, 4)), class = "data.frame", row.names = c(NA,
-5L))
> data2
X1 X2 X3
1 10 3 4
2 NA 2 3
3 9 2 NA
4 8 NA 5
5 NA 1 4
预期结果是
> data2
X1 X2 X3
1 10 3 4
2 7 2 3
3 9 2 2
4 8 2 5
5 5 1 4
感谢任何帮助。
我们可以使用coalesce
library(dplyr)
data2 %>%
mutate(across(everything(), ~ coalesce(., data1[[cur_column()]])))
-输出
# X1 X2 X3
#1 10 3 4
#2 7 2 3
#3 9 2 2
#4 8 2 5
#5 5 1 4
或在base R
i1 <- is.na(data2)
data2[i1] <- data1[i1]
这个有用吗:
library(dplyr)
coalesce(data2, data1)
X1 X2 X3
1 10 3 4
2 7 2 3
3 9 2 2
4 8 2 5
5 5 1 4
您也可以使用
library(tidyverse)
map2_dfc(data2, data1, coalesce)
# A tibble: 5 x 3
X1 X2 X3
<dbl> <dbl> <dbl>
1 10 3 4
2 7 2 3
3 9 2 2
4 8 2 5
5 5 1 4
我有两个数据集,data1
没有 NA
但 data2 有 NA
。我想用data1中的相应值替换data2中的NA。
dput(data1)
structure(list(X1 = c(4, 7, 8, 4, 5), X2 = c(2, 1, 1, 2, 1),
X3 = c(1, 2, 2, 1, 2)), class = "data.frame", row.names = c(NA,
-5L))
> data1
X1 X2 X3
1 4 2 1
2 7 1 2
3 8 1 2
4 4 2 1
5 5 1 2
> dput(data2)
structure(list(X1 = c(10, NA, 9, 8, NA), X2 = c(3, 2, 2, NA,
1), X3 = c(4, 3, NA, 5, 4)), class = "data.frame", row.names = c(NA,
-5L))
> data2
X1 X2 X3
1 10 3 4
2 NA 2 3
3 9 2 NA
4 8 NA 5
5 NA 1 4
预期结果是
> data2
X1 X2 X3
1 10 3 4
2 7 2 3
3 9 2 2
4 8 2 5
5 5 1 4
感谢任何帮助。
我们可以使用coalesce
library(dplyr)
data2 %>%
mutate(across(everything(), ~ coalesce(., data1[[cur_column()]])))
-输出
# X1 X2 X3
#1 10 3 4
#2 7 2 3
#3 9 2 2
#4 8 2 5
#5 5 1 4
或在base R
i1 <- is.na(data2)
data2[i1] <- data1[i1]
这个有用吗:
library(dplyr)
coalesce(data2, data1)
X1 X2 X3
1 10 3 4
2 7 2 3
3 9 2 2
4 8 2 5
5 5 1 4
您也可以使用
library(tidyverse)
map2_dfc(data2, data1, coalesce)
# A tibble: 5 x 3
X1 X2 X3
<dbl> <dbl> <dbl>
1 10 3 4
2 7 2 3
3 9 2 2
4 8 2 5
5 5 1 4