根据另一列的情况将多列组织成一行。

问题描述 投票:-1回答:1

绝对的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

就快到了...

r multiple-columns
1个回答
0
投票

我们需要首先 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))
© www.soinside.com 2019 - 2024. All rights reserved.