首页 > 解决方案 > 使用列名条件填充数据表

问题描述

你好,我想这个问题对于 R 专家来说很容易。我需要用列名填充数据表。填充取决于另一个列条件。例子 :

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

在此处输入图像描述

我想要获得的表格是:

在此处输入图像描述

谢谢您的帮助

标签: rdata.tableconditional-statements

解决方案


一些选项:

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>

推荐阅读