根据另一列将多列组织成一行

Organising multiple columns into a row based on another column

绝对的R新手,我知道这应该很简单,但是我花了2个小时没有成功。

如何从中转换我的数据框(数据框的前 6 行)

Symbol  AF  wave
CUX1    0.0975  1
CUX1    0.0337  3
CUX1    0.0217  4
LUC7L2  0.0488  1
LUC7L2  0.0515  3
LUC7L2  0.0422  4

这样的事情?

Symbol  AF  wave 1  wave 2  wave 3  wave 4
CUX1    0.0975  0.0975  NA  0.0337  0.0217
LUC7L2  0.0337  0.0488  NA  0.0515  0.0422

嗨,阿克伦,

根据你的建议,我得到了这样的结果:

Symbol  AF  wave 1  wave 2  wave 3  wave 4
CUX1    0.0975  0.0975  NA  NA  NA
LUC7L2  0.0337  0.0337  NA  NA  NA
CUX1    0.0975  NA  0.0337  NA  NA
LUC7L2  0.0337  NA  0.0515  NA  NA
CUX1    0.0975  NA  NA  0.082   NA
LUC7L2  0.0337  NA  NA  0.0781  NA

快到了...

我们需要先 complete 缺失的 'wave' 然后 pivot_wider 从 'long' 重塑为 'wide' 格式

library(dplyr)
library(tidyr)
library(stringr)
library(data.table)
df1 %>% 
    mutate(wave = str_c('wave', wave)) %>%
    complete(wave = str_c('wave', 1:4)) %>%
    mutate(rn = rowid(wave)) %>%
    pivot_wider(names_from = wave, values_from = AF) %>%
    filter(!is.na(Symbol)) %>%
    select(-rn)
# A tibble: 2 x 5
#  Symbol  wave1 wave2  wave3  wave4
#  <chr>   <dbl> <dbl>  <dbl>  <dbl>
#1 CUX1   0.0975    NA 0.0337 0.0217
#2 LUC7L2 0.0488    NA 0.0515 0.0422

数据

df1 <- structure(list(Symbol = c("CUX1", "CUX1", "CUX1", "LUC7L2", "LUC7L2", 
"LUC7L2"), AF = c(0.0975, 0.0337, 0.0217, 0.0488, 0.0515, 0.0422
), wave = c(1L, 3L, 4L, 1L, 3L, 4L)), class = "data.frame", row.names = c(NA, 
-6L))