r - 使用列名条件填充数据表
问题描述
你好,我想这个问题对于 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, 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>
推荐阅读
- sql - 将 2 个 SQL 查询合并为一个查询
- elasticsearch - 运行 logstash 时出现 IllegalStateException
- flutter - PageView 更改当前位置时状态不更新
- javascript - JavaScript - 文本框 - 根据光标/突出显示的位置从字符串/文本框中删除字符
- airflow - 如何从 DAG 中删除任务
- c++ - 在找到 x 项之前的系列总和时出现意外错误
- python - 可以将字符串转换为整数,每个字符串中都有一个单词python
- python-3.x - 如何打印通过 python 中的参数传递的函数的名称?
- charts - Google Charts - 列和表格图表显示在同一页面中
- hive - 如何用 apache pig 实现 concat_ws