将缺失行的显式表示添加到数据框?
Add in explicit representation of missing rows to data frame?
假设我有一个数据框
df <- tibble(name = c("Mark", "Frank"),
value1 = c(3,7),
value2 = c(8,2))
name value1 value2
<chr> <dbl> <dbl>
1 Mark 3 8
2 Frank 7 2
但是,我知道缺少名字。有没有办法用 NA
?
填充缺失名称的行
我想提供一个向量,例如
name_list <- c("Mark", "Frank", "Joe", "Bob", "Sam")
得到数据框如
name value1 value2
<chr> <dbl> <dbl>
1 Mark 3 8
2 Frank 7 2
3 Joe NA NA
4 Bob NA NA
5 Sam NA NA
我尝试使用 tidyr::complete()
但它似乎不能用于此目的?
也许你应该试试 full_join
dplyr::full_join(df, data.frame(name = name_list))
这给出了
# A tibble: 5 x 3
name value1 value2
<chr> <dbl> <dbl>
1 Mark 3 8
2 Frank 7 2
3 Joe NA NA
4 Bob NA NA
5 Sam NA NA
或者这可能遵循 @ThomasIsCoding 的明智解决方案:
library(tidyverse)
#Code
newdf <- name_list %>% data.frame() %>% setNames(.,'name') %>%
left_join(df)
输出:
name value1 value2
1 Mark 3 8
2 Frank 7 2
3 Joe NA NA
4 Bob NA NA
5 Sam NA NA
或使用complete()
:
#Code2
newdf <- df %>% complete(data.frame(name=name_list))
输出:
# A tibble: 5 x 3
name value1 value2
<chr> <dbl> <dbl>
1 Bob NA NA
2 Frank 7 2
3 Joe NA NA
4 Mark 3 8
5 Sam NA NA
使用 base R
中的 merge
merge(df, data.frame(name = name_list), all = TRUE)
假设我有一个数据框
df <- tibble(name = c("Mark", "Frank"),
value1 = c(3,7),
value2 = c(8,2))
name value1 value2
<chr> <dbl> <dbl>
1 Mark 3 8
2 Frank 7 2
但是,我知道缺少名字。有没有办法用 NA
?
我想提供一个向量,例如
name_list <- c("Mark", "Frank", "Joe", "Bob", "Sam")
得到数据框如
name value1 value2
<chr> <dbl> <dbl>
1 Mark 3 8
2 Frank 7 2
3 Joe NA NA
4 Bob NA NA
5 Sam NA NA
我尝试使用 tidyr::complete()
但它似乎不能用于此目的?
也许你应该试试 full_join
dplyr::full_join(df, data.frame(name = name_list))
这给出了
# A tibble: 5 x 3
name value1 value2
<chr> <dbl> <dbl>
1 Mark 3 8
2 Frank 7 2
3 Joe NA NA
4 Bob NA NA
5 Sam NA NA
或者这可能遵循 @ThomasIsCoding 的明智解决方案:
library(tidyverse)
#Code
newdf <- name_list %>% data.frame() %>% setNames(.,'name') %>%
left_join(df)
输出:
name value1 value2
1 Mark 3 8
2 Frank 7 2
3 Joe NA NA
4 Bob NA NA
5 Sam NA NA
或使用complete()
:
#Code2
newdf <- df %>% complete(data.frame(name=name_list))
输出:
# A tibble: 5 x 3
name value1 value2
<chr> <dbl> <dbl>
1 Bob NA NA
2 Frank 7 2
3 Joe NA NA
4 Mark 3 8
5 Sam NA NA
使用 base R
merge
merge(df, data.frame(name = name_list), all = TRUE)