在不同的 data.table 中查找列名并在匹配时使用该信息
Looking up a column name in a different data.table and use the information when there is a match
我想将 data.table 的 Group
信息存储在下面 (DT1
) 作为第二个 data.table 的列名的标签。第二个 data.table (DT2
) 的列名与第一个 data.table.
的 nr
信息相同
set.seed(1)
DT1 <- data.table(nr= paste0('x',1:100),Group = c(rep("A",10),rep("B",10),rep("C",10),rep("D",10),rep("E",10),rep("F",10),rep("G",10),rep("H",10),rep("I",10),rep("J",10)),
id = c(rep(1,20),rep(2,20),rep(3,20),rep(4,20),rep(5,20)),
Time = rep(seq(as.Date("2010-01-03"), length=20, by="1 month") - 1,5),
norm = round(runif(100)/10,2),
y = sample(100,100),
x2 = round(rnorm(100,0.75,0.3),2),
x3 = round(rnorm(100,0.75,0.3),2),
x4 = round(rnorm(100,0.75,0.3),2),
x5 = round(rnorm(100,0.75,0.3),2))
DT2 <- data.table(matrix(0, ncol=100, nrow=2, dimnames=list(NULL,
paste0('x',1:100))))
我以前做过这样的事情:
library(Hmisc)
for (i in seq_len(ncol(DT2))) {Hmisc::label(IV[[DT1$`nr`[i]]]) <- ES1obs$Group[i]}
但是当列的数量不相同时,这会产生很多问题。
我该如何编写代码,以便将 DT1
的 nr
列与 DT2
的列名称进行比较,并在比较时添加 Group
列他们匹配吗?
期望的结果:
label(DT2$x1) <- "A"
label(DT2$x2) <- "A"
...
label(DT2$x100) <- "J"
假设 DT2
的所有列名称始终存在于 DT1$nr
中,请尝试使用 match
library(Hmisc)
for (i in seq_len(ncol(DT2))) {
label(DT2[[i]]) <- DT1$Group[match(names(DT2)[i], DT1$nr)]
}
head(label(DT2))
# x1 x2 x3 x4 x5 x6
#"A" "A" "A" "A" "A" "A"
tail(label(DT2))
# x95 x96 x97 x98 x99 x100
# "J" "J" "J" "J" "J" "J"
我想将 data.table 的 Group
信息存储在下面 (DT1
) 作为第二个 data.table 的列名的标签。第二个 data.table (DT2
) 的列名与第一个 data.table.
nr
信息相同
set.seed(1)
DT1 <- data.table(nr= paste0('x',1:100),Group = c(rep("A",10),rep("B",10),rep("C",10),rep("D",10),rep("E",10),rep("F",10),rep("G",10),rep("H",10),rep("I",10),rep("J",10)),
id = c(rep(1,20),rep(2,20),rep(3,20),rep(4,20),rep(5,20)),
Time = rep(seq(as.Date("2010-01-03"), length=20, by="1 month") - 1,5),
norm = round(runif(100)/10,2),
y = sample(100,100),
x2 = round(rnorm(100,0.75,0.3),2),
x3 = round(rnorm(100,0.75,0.3),2),
x4 = round(rnorm(100,0.75,0.3),2),
x5 = round(rnorm(100,0.75,0.3),2))
DT2 <- data.table(matrix(0, ncol=100, nrow=2, dimnames=list(NULL,
paste0('x',1:100))))
我以前做过这样的事情:
library(Hmisc)
for (i in seq_len(ncol(DT2))) {Hmisc::label(IV[[DT1$`nr`[i]]]) <- ES1obs$Group[i]}
但是当列的数量不相同时,这会产生很多问题。
我该如何编写代码,以便将 DT1
的 nr
列与 DT2
的列名称进行比较,并在比较时添加 Group
列他们匹配吗?
期望的结果:
label(DT2$x1) <- "A"
label(DT2$x2) <- "A"
...
label(DT2$x100) <- "J"
假设 DT2
的所有列名称始终存在于 DT1$nr
match
library(Hmisc)
for (i in seq_len(ncol(DT2))) {
label(DT2[[i]]) <- DT1$Group[match(names(DT2)[i], DT1$nr)]
}
head(label(DT2))
# x1 x2 x3 x4 x5 x6
#"A" "A" "A" "A" "A" "A"
tail(label(DT2))
# x95 x96 x97 x98 x99 x100
# "J" "J" "J" "J" "J" "J"