我有这个数据:
df_1 <- data.frame(
x = c(NA, 1, 2, NA, 6),
y = c(1, 2, 3, 4, 6)
)
还有代码:
library(tidyverse)
df_2 <- df_1 %>%
pivot_longer(cols = c(x, y), names_to = 'factor', values_to = 'values',
values_drop_na = FALSE)
df_2
# A tibble: 10 x 2
factor values
<chr> <dbl>
1 x NA
2 y 1
3 x 1
4 y 2
5 x 2
6 y 3
7 x NA
8 y 4
9 x 6
10 y 6
问题:参数 values_fill
不起作用。
df_2 %>%
group_by(factor) %>%
mutate(n = row_number()) %>%
pivot_wider(names_from = factor, values_from = values,
values_fill = list(values = 0)) %>%
select(-1)
values_fill = list(values = 0))
不要用 0
替换缺失值:
# A tibble: 5 x 2
x y
<dbl> <dbl>
1 NA 1
2 1 2
3 2 3
4 NA 4
5 6 6
有什么问题?
最佳答案
values_fill
填充组合不存在的地方。在这里,NA
已经是数据集中的一个值。它原样保留或必须在 pivot_wider
df_2 %>%
group_by(factor) %>%
mutate(n = row_number())
# A tibble: 10 x 3
# Groups: factor [2]
# factor values n
# <chr> <dbl> <int>
# 1 x NA 1
# 2 y 1 1
# 3 x 1 2
# 4 y 2 2
# 5 x 2 3
# 6 y 3 3
# 7 x NA 4
# 8 y 4 4
# 9 x 6 5
#10 y 6 5
即如果我们删除 NA
行,那么将缺少 values_fill
作用的组合
df_2 %>%
group_by(factor) %>%
mutate(n = row_number()) %>%
ungroup %>%
filter(!is.na(values)) %>%
pivot_wider(names_from = factor, values_from = values,
values_fill = list(values = 0))
# A tibble: 5 x 3
# n y x
# <int> <dbl> <dbl>
#1 1 1 0
#2 2 2 1
#3 3 3 2
#4 4 4 0
#5 5 6 6
关于r - tidyr::pivot_wider 中的 values_fill 参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58650001/