通过匹配在数据框中搜索这些值来替换缺失值
Replacing missing values by searching dataframe for those values by matching
我有一个包含约 500,000 个观察值的数据框,一些列有空白,例如一个失踪的名字。然而,名称与 ID 相对应,有时名称或 ID 都存在,但有时缺少一个或另一个。有没有办法通过df搜索,找到并匹配缺失的数据
所以在这个简单的例子中
structure(list(Names = c("Jon", "Al", "Phil", "Sarah", "Jon",
" "), ID = c(12, 14, 16, 18, 12, 14)), class = "data.frame", row.names = c(NA,
-6L))
df
Names ID
1 Jon 12
2 Al 14
3 Phil 16
4 Sarah 18
5 Jon 12
6 14
我知道 14 与 Al
匹配,所以我可以用 Al 替换第 6 行的空白。
但是,如何在具有多个缺失值的情况下更大规模地执行此操作?
假设 ID
只有一个唯一的 'Names' - 按 'ID' 分组并替换空白的 'Names' (""
)第一个 'Names'
library(dplyr)
df %>%
mutate(Names = trimws(Names)) %>%
group_by(ID) %>%
mutate(Names = replace(Names, Names == "",
first(Names[Names != ""]))) %>%
ungroup
-输出
# A tibble: 6 × 2
Names ID
<chr> <dbl>
1 Jon 12
2 Al 14
3 Phil 16
4 Sarah 18
5 Jon 12
6 Al 14
另一种选择是将 ""
替换为 NA
,然后使用 fill
将缺失值替换为 'ID' 与非 NA 相邻名称
library(tidyr)
df %>%
mutate(Names = na_if(trimws(Names), "")) %>%
group_by(ID) %>%
fill(Names, .direction = 'downup') %>%
ungroup
# A tibble: 6 × 2
Names ID
<chr> <dbl>
1 Jon 12
2 Al 14
3 Phil 16
4 Sarah 18
5 Jon 12
6 Al 14
我有一个包含约 500,000 个观察值的数据框,一些列有空白,例如一个失踪的名字。然而,名称与 ID 相对应,有时名称或 ID 都存在,但有时缺少一个或另一个。有没有办法通过df搜索,找到并匹配缺失的数据
所以在这个简单的例子中
structure(list(Names = c("Jon", "Al", "Phil", "Sarah", "Jon",
" "), ID = c(12, 14, 16, 18, 12, 14)), class = "data.frame", row.names = c(NA,
-6L))
df
Names ID
1 Jon 12
2 Al 14
3 Phil 16
4 Sarah 18
5 Jon 12
6 14
我知道 14 与 Al
匹配,所以我可以用 Al 替换第 6 行的空白。
但是,如何在具有多个缺失值的情况下更大规模地执行此操作?
假设 ID
只有一个唯一的 'Names' - 按 'ID' 分组并替换空白的 'Names' (""
)第一个 'Names'
library(dplyr)
df %>%
mutate(Names = trimws(Names)) %>%
group_by(ID) %>%
mutate(Names = replace(Names, Names == "",
first(Names[Names != ""]))) %>%
ungroup
-输出
# A tibble: 6 × 2
Names ID
<chr> <dbl>
1 Jon 12
2 Al 14
3 Phil 16
4 Sarah 18
5 Jon 12
6 Al 14
另一种选择是将 ""
替换为 NA
,然后使用 fill
将缺失值替换为 'ID' 与非 NA 相邻名称
library(tidyr)
df %>%
mutate(Names = na_if(trimws(Names), "")) %>%
group_by(ID) %>%
fill(Names, .direction = 'downup') %>%
ungroup
# A tibble: 6 × 2
Names ID
<chr> <dbl>
1 Jon 12
2 Al 14
3 Phil 16
4 Sarah 18
5 Jon 12
6 Al 14