微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要帮助重塑 R 数据集

如何解决需要帮助重塑 R 数据集

我的数据集目前看起来像这样:

id  date00  var1_00 var2_00 date01  var1_01 var2_01
1   1/1/2019    1   2       1/1/2020    3   4
2   2/2/2019    1   2       2/2/2020    3   4
3   3/3/2019    1   2       3/3/2020    3   4

表格代码

structure(list(id = c(1,2,3),date00 = structure(c(1546300800,1549065600,1551571200),class = c("POSIXct","POSIXt"),tzone = "UTC"),var1_00 = c(1,1,1),var2_00 = c(2,2),date01 = structure(c(1577836800,1580601600,1583193600),var1_01 = c(3,3,var2_01 = c(4,4,4)),row.names = c(NA,-3L),class = c("tbl_df","tbl","data.frame"))

我如何重塑它,使其看起来像这样:

id  date    var1_00 var2_00 var1_01 var2_01
1   1/1/2019    1   2       NA      NA
2   2/2/2019    1   2       NA      NA
3   3/3/2019    1   2       NA      NA
1   1/1/2020    NA  NA      3       4
2   1/1/2020    NA  NA      3       4
3   1/1/2020    NA  NA      3       4

谢谢!

解决方法

我尝试了一点,然后得出了这个解决方案。请告诉我。

library(dplyr)

df1 <- df %>% 
  mutate(date=date00,var1_01=NA,var2_01=NA) %>% 
  select(id,date,var1_00,var2_00,var1_01,var2_01) 

df2 <- df %>% 
  mutate(date=date01,var1_00=NA,var2_00=NA) %>% 
  select(id,var2_01)

df_new <- rbind(df1,df2)
,

这是一个使用 data.table

rbindlist 选项
setDT(df)
dt1 <- setnames(df[,.SD,.SDcols = grep("^id|00$",names(df))],"date00","date")
dt2 <- setnames(df[,.SDcols = grep("^id|01$","date01","date")
out <- rbindlist(list(dt1,dt2),fill = TRUE)

dt <- as.data.table(df)
out <- rbindlist(
  lapply(
    split.default(dt[,-1],gsub(".*(\\d+$)","\\1",names(dt)[-1])),function(x) cbind(dt[,1],setnames(x,1,"date"))),fill = TRUE
)

这样

> out
   id       date var1_00 var2_00 var1_01 var2_01
1:  1 2019-01-01       1       2      NA      NA
2:  2 2019-02-02       1       2      NA      NA
3:  3 2019-03-03       1       2      NA      NA
4:  1 2020-01-01      NA      NA       3       4
5:  2 2020-02-02      NA      NA       3       4
6:  3 2020-03-03      NA      NA       3       4

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。