在r中按长格式data.table中的id填充可变单元格

2024-03-07

我有一个长格式的表,其中随时间变化的数据仅按 id 出现一次,如下所示

dt<-data.table(
      ID=c(rep(1,3),rep(2,3)),
      Time=rep(1:3,2),
      Sex=c("M",NA,NA,"F",NA,NA),
      V1=c(1.1,1.2,1.3,2.1,2.2,2.3)
    )

dt
   ID Time  Sex  V1
1:  1    1    M 1.1
2:  1    2 <NA> 1.2
3:  1    3 <NA> 1.3
4:  2    1    F 2.1
5:  2    2 <NA> 2.2
6:  2    3 <NA> 2.3

我想用Time==1时Sex的值来填充Sex中缺失的值,即通过ID跨Time时刻重复值,这样dt就变成

   ID Time Sex  V1
1:  1    1   M 1.1
2:  1    2   M 1.2
3:  1    3   M 1.3
4:  2    1   F 2.1
5:  2    2   F 2.2
6:  2    3   F 2.3

我怎样才能做到这一点?

Thanks


我们可以按 ID 进行分组fill“性别”栏

library(dplyr)
library(tidyr)
dt %>%
  group_by(ID) %>%
  fill(Sex)

Or with data.table,按“ID”分组,对“时间”为 1 的“性别”进行子集化并分配 (:=) 到同一列

library(data.table)
dt[,  Sex := Sex[Time == 1], ID]

-output

dt
#   ID Time Sex  V1
#1:  1    1   M 1.1
#2:  1    2   M 1.2
#3:  1    3   M 1.3
#4:  2    1   F 2.1
#5:  2    2   F 2.2
#6:  2    3   F 2.3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在r中按长格式data.table中的id填充可变单元格 的相关文章

随机推荐