R语言 将每个ID的数据从一行上移到新列[重复]

balp4ylt  于 2023-03-21  发布在  其他
关注(0)|答案(2)|浏览(107)

此问题在此处已有答案

How to reshape data from long to wide format(14个答案)
8天前关闭。
我在一个数据框中有数据,其中包含不同ID的多个年份的值。当前,它显示如下:

(can使用以下代码重新创建):

df<-data.frame(WLH_ID=c("15-7318","15-7318","15-7319","15-7319","15-7320","15-7320","15-7320"),
year=c("2017","2018","2017","2018","2017","2018","2019"),
overlap_95=c("1","1","0.626311190934023","0.968386735773874","0.713286882088087","0.824103998854928","0.451493099154607"))

我希望将其重新塑造为如下所示:
实际上,我希望从行中提取值,以便每年都在自己的列中-但如果有意义,请将数据与ID保持在同一行中,以便我可以在各年之间比较每个ID

一些ID可能比其他ID拥有更多年的数据,在这种情况下,我希望将额外的年表示为NA或NULL。
我想这是可以做到的--只是不知道从哪里开始。我也找不到这个问题已经回答过了,但我可能措辞错误。
先谢了!

x8goxv8g

x8goxv8g1#

我想也许你只需要dplyr::pivot_wider()

> df %>%
   pivot_wider(names_from = year,values_from = overlap_95,names_prefix = "overlap_95_")

# A tibble: 3 × 4
  WLH_ID  overlap_95_2017   overlap_95_2018   overlap_95_2019  
  <chr>   <chr>             <chr>             <chr>            
1 15-7318 1                 1                 NA               
2 15-7319 0.626311190934023 0.968386735773874 NA               
3 15-7320 0.713286882088087 0.824103998854928 0.451493099154607
bkhjykvo

bkhjykvo2#

一种方法是使用pivot_wider(),在rename()之后使用列,最后使用replace()将缺失值替换为blank单元格:

library(tidyverse)

dfw <- df %>% pivot_wider(names_from = "year", values_from = "overlap_95") %>%
      rename(verlap_95Y1='2017',verlap_95Y2='2018',verlap_95Y3='2019') %>%
      replace(is.na(.), "")

dfw应如下所示:

View(dfw)

相关问题