你好,我想这个问题对于R专家来说很容易。我需要用列名填充数据表。填充取决于另一个色谱柱条件。例子:
library(data.table)
dt <- data.table(V1=1:12,V2=c(1L,0L),V3=c(0L,1L,0L))
我要获取的表是:
感谢您的帮助
一些选项:
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,".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[,nm) fifelse(x==1L,nm,NA_character_),.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>