有没有办法将列中的每隔一行移动到 R 中的新列中?

Pra*_*shP 1 r dplyr tidyr purrr tidyverse

挑战:我有一列,其中有几行。例如,第一行是“水果名称”,第二行是“水果颜色”,并且对于另一种水果重复。我想抓住每隔一行(水果颜色)并创建一个新列。原来的一栏中只保留了水果名称

library(tidyverse)
df_before <- tribble(~Singlecolumn,"Apple","Red","Banana","Yellow","Kiwi","Grey","Grapes","Green")
df_before
Singlecolumn
<chr>
Apple               
Red             
Banana              
Yellow              
Kiwi                
Grey                
Grapes              
Green

#I would like to split this like below:
df_after <- tribble(~Column1, ~Column2, "Apple","Red","Banana","Yellow","Kiwi","Grey","Grapes","Green")
df_after

Column1 Column2
Apple   Red         
Banana  Yellow          
Kiwi    Grey            
Grapes  Green
Run Code Online (Sandbox Code Playgroud)

我确信有一种更简单的方法可以使用 tidyverse 中的函数来完成此操作,但通过大量搜索找不到任何信息。将不胜感激任何指点。提前致谢!

akr*_*run 7

更简单的选择是转换为matrix2 列并转换为data.frameinbase R

as.data.frame(matrix(df_before$Singlecolumn, ncol = 2, byrow = TRUE))
Run Code Online (Sandbox Code Playgroud)

但是,我们也可以使用tidyverse,我们创建两个组rep,然后使用pivot_wider将“长”格式重塑为“宽”格式

library(dplyr)
library(tidyr)
df_before %>%
  group_by(grp = str_c('Column', rep(1:2, length.out = n()))) %>%
  mutate(rn = row_number()) %>%
  ungroup %>%
  pivot_wider(names_from = grp, values_from = Singlecolumn) %>%
  select(-rn)
# A tibble: 4 x 2
#  Column1 Column2
#  <chr>   <chr>  
#1 Apple   Red    
#2 Banana  Yellow 
#3 Kiwi    Grey   
#4 Grapes  Green  
Run Code Online (Sandbox Code Playgroud)