添加一列,其中包含 R 中 tibble 的特定列的缺失值
Adding a column that contain te missing values of an specific column of a tibble in R
我正在使用 R。我得到了数据集中特定列的缺失值,我需要将它们添加到我的主数据中。
我的数据是这样的...
A B C D G
Joseph 5 2.1 6.0 7.8
Juan NA 3.0 3.5 3.8
Miguel 2 4.0 2.0 2.5
Steven NA 6.0 5.0 0.2
Jennifer NA 0.1 5.0 7.0
Emma 8.0 8.1 8.3 8.5
所以,不,我在 B 列中有缺失值的数据
A B
Juan 3.0
Steven 2.5
Jennifer 4.4
我需要将它们添加到我的主要数据中。我尝试使用 tidyverse 中的 coalesce 函数,但无法获得正确的结果。
一个选项可以是:
df %>%
mutate(B = if_else(is.na(B), df2$B[match(A, df2$A)], B))
A B C D G
1 Joseph 5.0 2.1 6.0 7.8
2 Juan 3.0 3.0 3.5 3.8
3 Miguel 2.0 4.0 2.0 2.5
4 Steven 2.5 6.0 5.0 0.2
5 Jennifer 4.4 0.1 5.0 7.0
6 Emma 8.0 8.1 8.3 8.5
这个有用吗:
df
# A tibble: 6 x 5
A B C D G
<chr> <dbl> <dbl> <dbl> <dbl>
1 Joseph 5 2.1 6 7.8
2 Juan NA 3 3.5 3.8
3 Miguel 2 4 2 2.5
4 Steven NA 6 5 0.2
5 Jennifer NA 0.1 5 7
6 Emma 8 8.1 8.3 8.5
dd
# A tibble: 3 x 2
A B
<chr> <dbl>
1 Juan 3
2 Steven 2.5
3 Jennifer 4.4
df$B[match(dd$A,df$A)] <- dd$B
df
# A tibble: 6 x 5
A B C D G
<chr> <dbl> <dbl> <dbl> <dbl>
1 Joseph 5 2.1 6 7.8
2 Juan 3 3 3.5 3.8
3 Miguel 2 4 2 2.5
4 Steven 2.5 6 5 0.2
5 Jennifer 4.4 0.1 5 7
6 Emma 8 8.1 8.3 8.5
您可以加入数据,然后在 B 列上应用 NA 值。
# your original data with missing value in column B
data
# data that contain data to fill into column B
additional_data
library(dplyr)
merged_data <- left_join(data, additional_data, by = "A",
suffix = c("", "_additional"))
merged_data %>% mutate(B = if_else(is_na(B), B_additional, B)) %>%
select(-B_additional)
您可以加入两个数据框并使用 coalesce
作为 B
值。
library(dplyr)
df1 %>%
left_join(df2, by = 'A') %>%
mutate(B = coalesce(B.x, B.y)) %>%
select(names(df1))
# A B C D G
#1 Joseph 5.0 2.1 6.0 7.8
#2 Juan 3.0 3.0 3.5 3.8
#3 Miguel 2.0 4.0 2.0 2.5
#4 Steven 2.5 6.0 5.0 0.2
#5 Jennifer 4.4 0.1 5.0 7.0
#6 Emma 8.0 8.1 8.3 8.5
或以 R 为基数:
transform(merge(df1, df2, all.x = TRUE, by = 'A'),
B = ifelse(is.na(B.x), B.y, B.x))[names(df1)]
我正在使用 R。我得到了数据集中特定列的缺失值,我需要将它们添加到我的主数据中。
我的数据是这样的...
A B C D G
Joseph 5 2.1 6.0 7.8
Juan NA 3.0 3.5 3.8
Miguel 2 4.0 2.0 2.5
Steven NA 6.0 5.0 0.2
Jennifer NA 0.1 5.0 7.0
Emma 8.0 8.1 8.3 8.5
所以,不,我在 B 列中有缺失值的数据
A B
Juan 3.0
Steven 2.5
Jennifer 4.4
我需要将它们添加到我的主要数据中。我尝试使用 tidyverse 中的 coalesce 函数,但无法获得正确的结果。
一个选项可以是:
df %>%
mutate(B = if_else(is.na(B), df2$B[match(A, df2$A)], B))
A B C D G
1 Joseph 5.0 2.1 6.0 7.8
2 Juan 3.0 3.0 3.5 3.8
3 Miguel 2.0 4.0 2.0 2.5
4 Steven 2.5 6.0 5.0 0.2
5 Jennifer 4.4 0.1 5.0 7.0
6 Emma 8.0 8.1 8.3 8.5
这个有用吗:
df
# A tibble: 6 x 5
A B C D G
<chr> <dbl> <dbl> <dbl> <dbl>
1 Joseph 5 2.1 6 7.8
2 Juan NA 3 3.5 3.8
3 Miguel 2 4 2 2.5
4 Steven NA 6 5 0.2
5 Jennifer NA 0.1 5 7
6 Emma 8 8.1 8.3 8.5
dd
# A tibble: 3 x 2
A B
<chr> <dbl>
1 Juan 3
2 Steven 2.5
3 Jennifer 4.4
df$B[match(dd$A,df$A)] <- dd$B
df
# A tibble: 6 x 5
A B C D G
<chr> <dbl> <dbl> <dbl> <dbl>
1 Joseph 5 2.1 6 7.8
2 Juan 3 3 3.5 3.8
3 Miguel 2 4 2 2.5
4 Steven 2.5 6 5 0.2
5 Jennifer 4.4 0.1 5 7
6 Emma 8 8.1 8.3 8.5
您可以加入数据,然后在 B 列上应用 NA 值。
# your original data with missing value in column B
data
# data that contain data to fill into column B
additional_data
library(dplyr)
merged_data <- left_join(data, additional_data, by = "A",
suffix = c("", "_additional"))
merged_data %>% mutate(B = if_else(is_na(B), B_additional, B)) %>%
select(-B_additional)
您可以加入两个数据框并使用 coalesce
作为 B
值。
library(dplyr)
df1 %>%
left_join(df2, by = 'A') %>%
mutate(B = coalesce(B.x, B.y)) %>%
select(names(df1))
# A B C D G
#1 Joseph 5.0 2.1 6.0 7.8
#2 Juan 3.0 3.0 3.5 3.8
#3 Miguel 2.0 4.0 2.0 2.5
#4 Steven 2.5 6.0 5.0 0.2
#5 Jennifer 4.4 0.1 5.0 7.0
#6 Emma 8.0 8.1 8.3 8.5
或以 R 为基数:
transform(merge(df1, df2, all.x = TRUE, by = 'A'),
B = ifelse(is.na(B.x), B.y, B.x))[names(df1)]