[英]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.