绝对的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
缺少的 "波浪",然后做 pivot_wider
从 "长 "格式调整为 "宽 "格式。
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))