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 中的函数来完成此操作,但通过大量搜索找不到任何信息。将不胜感激任何指点。提前致谢!
更简单的选择是转换为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)