[英]How can I fill with NA values using pivot_wider in R
这是我的数据框:
df <- tibble(x = c('a','a','a','a','a','b','b','b'), y = 1:8)
我想要这个最终输出:
df_final <- tibble(x = c('a','a','a','a','a'), y = 1:5, x_1 = c('b','b','b',NA,NA), y_1 = c(6,7,8,NA,NA))
如何使用pivot_wider
函数执行此操作?
你要求的不是一个旋转,试试这个。
library(dplyr)
library(purrr) # map_dfc
df %>%
split(., .$x) %>%
map_dfc(~ lapply(., `length<-`, max(table(df$x))))
# Warning: Outer names are only allowed for unnamed scalar atomic inputs
# New names:
# * x -> x...1
# * y -> y...2
# * x -> x...3
# * y -> y...4
# # A tibble: 5 x 4
# x...1 y...2 x...3 y...4
# <chr> <int> <chr> <int>
# 1 a 1 b 6
# 2 a 2 b 7
# 3 a 3 b 8
# 4 a 4 <NA> NA
# 5 a 5 <NA> NA
另一个tidyverse
解决方案。 我们可以创建一个ID
通过柱x
,分割由数据帧x
,使用reduce
和left_join
加入这些数据帧。
library(tidyverse)
df2 <- df %>%
group_by(x) %>%
mutate(ID = 1:n()) %>%
split(.$x) %>%
reduce(.f = left_join, by = "ID") %>%
select(-ID) %>%
setNames(c("x", "y", "x_1", "y_1"))
df2
# # A tibble: 5 x 4
# x y x_1 y_1
# <chr> <int> <chr> <int>
# 1 a 1 b 6
# 2 a 2 b 7
# 3 a 3 b 8
# 4 a 4 NA NA
# 5 a 5 NA NA
随着tidyverse
,
df %>% group_split(x) %>% reduce(merge, by = 0,all=T) %>% select(-1)
给,
x.x y.x x.y y.y
1 a 1 b 6
2 a 2 b 7
3 a 3 b 8
4 a 4 <NA> NA
5 a 5 <NA> NA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.