условное заполнение таблицы данных именами столбцов - PullRequest
0 голосов
/ 22 января 2020

привет, я думаю, эта проблема проста для экспертов R. Мне нужно заполнить таблицу данных с названием столбцов. Заполнение зависит от другого условия столбца. Пример:

library(data.table)
dt <- data.table(V1=1:12, V2=c(1L,0L), V3=c(0L,1L,0L))

enter image description here

и таблица, которую я пытаюсь получить:

enter image description here

спасибо за помощь

1 Ответ

2 голосов
/ 22 января 2020

Некоторые опции:

1) с использованием for:

cols <- c("V2", "V3")
for (x in cols)
    set(dt, dt[get(x)==1L, which=TRUE], paste0(x,".twin"), x)

2) Подмножество в i перед обновлением по ссылке

for (x in cols)
    dt[get(x)==1L, paste0(x,".twin") := x]

3) индексирование вектора

cols <- c("V2", "V3")
dt[, paste0(cols, ".twin") := Map(function(x, nm) c(NA_character_, nm)[x+1L], .SD, cols), .SDcols=cols]

4) с использованием ifelse

dt[, paste0(cols, ".twin") := Map(function(x, nm) fifelse(x==1L, nm, NA_character_), .SD, cols), .SDcols=cols]

вывод:

    V1 V2 V3 V2.twin V3.twin
 1:  1  1  0      V2    <NA>
 2:  2  0  1    <NA>      V3
 3:  3  1  0      V2    <NA>
 4:  4  0  0    <NA>    <NA>
 5:  5  1  1      V2      V3
 6:  6  0  0    <NA>    <NA>
 7:  7  1  0      V2    <NA>
 8:  8  0  1    <NA>      V3
 9:  9  1  0      V2    <NA>
10: 10  0  0    <NA>    <NA>
11: 11  1  1      V2      V3
12: 12  0  0    <NA>    <NA>
...