簡體   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