Поиск имени столбца в другой таблице данных и использование информации при совпадении - PullRequest
0 голосов
/ 20 июня 2019

Я хотел бы сохранить информацию Group таблицы data.table ниже (DT1) в качестве метки для имен столбцов второго файла data.table.Имена столбцов второго data.table (DT2) идентичны nr информации первого data.table.

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]} 

Но это имеет много проблем, когда количество столбцов не идентично.

Как я могу написать код, чтобы он сравнивал столбец nr DT1 со столбцомимена DT2 и добавить столбец Group, когда они совпадают?

Желаемый результат:

label(DT2$x1) <- "A"
label(DT2$x2) <- "A"
...
label(DT2$x100) <- "J"

1 Ответ

1 голос
/ 20 июня 2019

Попробуйте использовать match, предполагая, что все имена столбцов DT2 всегда присутствуют в DT1$nr

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" 
...