根据R中的唯一ID将列移至行中

问题描述 投票:0回答:2

我的数据当前的格式如下:

    ID  PC1     PC2     PC3     PC4
    5   8970    864     
    6   2800    2812    2801    284

我想要的是每个数据点的单独行,链接到唯一ID,以便:

    ID  PC
    5   8970
    5   864
    6   2800
    6   2812
    6   2801
    6   284

我意识到这是一个非常基本的问题,但是在寻找类似问题时,我只能找到相反的方法!

谢谢

r transpose id
2个回答
0
投票

library(dplyr)
library(tidyr)

df %>% 
  tidyr::pivot_longer(-ID, names_to = "PC_code", values_to = "PC") %>% 
  dplyr::select(-PC_code)

0
投票

最好用NA's填充空白,您可以通过以下方法轻松完成此操作:

library(dplyr)
df <- df %>% mutate_all(na_if,"")

我的幼稚解决方案,但明确:

library(reshape)
Input = (
  'ID  PC1     PC2     PC3     PC4
5   8970    864     NA     NA    
6   2800    2812    2801    284')
df = read.table(textConnection(Input), header = T)
df
res <- melt(df,id='ID')
res$variable <- NULL
res <- res[complete.cases(res),]
res <- res[order(res$ID),]
colnames(res)[2] <- 'PC'
res
  ID   PC
1  5 8970
3  5  864
2  6 2800
4  6 2812
6  6 2801
8  6  284
© www.soinside.com 2019 - 2024. All rights reserved.