繁体   English   中英

如何在 R 中使用 pivot_wider 填充 NA 值

[英]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 ,使用reduceleft_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM