Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 替换data.table中的嵌套ifelse_R_Nested_Data.table - Fatal编程技术网

R 替换data.table中的嵌套ifelse

R 替换data.table中的嵌套ifelse,r,nested,data.table,R,Nested,Data.table,我想在data.table中创建一列,该列从一组给定列中获取第一个非NA值: 图书馆数据表 o一些原始想法: 1使用fcase,当前可在开发版本中获得: o[, nc := fcase( !is.na(a1), a1, !is.na(a2), a2, !is.na(a3), a3, rep(TRUE, nrow(o)), as.double(default) )] 2.使用应用程序: 3使用熔体: 4将集合与列索引向量一起使用: 5使用带有矩阵数

我想在data.table中创建一列,该列从一组给定列中获取第一个非NA值:

图书馆数据表 o一些原始想法:

1使用fcase,当前可在开发版本中获得:

o[, nc := fcase(
      !is.na(a1), a1,
      !is.na(a2), a2,
      !is.na(a3), a3,
      rep(TRUE, nrow(o)), as.double(default)
)]
2.使用应用程序:

3使用熔体:

4将集合与列索引向量一起使用:

5使用带有矩阵数字索引的max.col:

o[, nc := {
    m <- as.matrix(.SD)
    m[cbind(seq.int(.N), max.col(!is.na(m), "first"))]
}]
5号和6号的学分归chinsoon12。 一些原始想法:

1使用fcase,当前可在开发版本中获得:

o[, nc := fcase(
      !is.na(a1), a1,
      !is.na(a2), a2,
      !is.na(a3), a3,
      rep(TRUE, nrow(o)), as.double(default)
)]
2.使用应用程序:

3使用熔体:

4将集合与列索引向量一起使用:

5使用带有矩阵数字索引的max.col:

o[, nc := {
    m <- as.matrix(.SD)
    m[cbind(seq.int(.N), max.col(!is.na(m), "first"))]
}]
5号和6号的学分归chinsoon12。
谢谢,这与dplyr::case_相比,它有助于避免嵌套ifelse的一些丑陋之处,但仍然需要大量硬编码。关于apply的第二个解决方案:它在大数据表中能很好地扩展吗?@thothal我认为它不能很好地扩展。很好,我也在考虑melt!需要对代码进行一点修改,同时也要避免一开始就创建行,现在它就像一个符咒一样工作。@thothal编辑后,结果不一样。。。和你期望的输出不一样,我忽略了这一点——做了一次回滚。但是,您的解决方案仍然给我一个空列。但是正确的结果是在行中的,所以我猜动态引用语义并不像预期的那样工作。谢谢,这与dplyr::case_相比,它有助于避免嵌套ifels的一些丑陋之处,但仍然需要大量的硬编码。关于apply的第二个解决方案:它在大数据表中能很好地扩展吗?@thothal我认为它不能很好地扩展。很好,我也在考虑melt!需要对代码进行一点修改,同时也要避免一开始就创建行,现在它就像一个符咒一样工作。@thothal编辑后,结果不一样。。。和你期望的输出不一样,我忽略了这一点——做了一次回滚。但是,您的解决方案仍然给我一个空列。但是正确的结果在行中,所以我猜动态的by-ref语义并没有像预期的那样工作。
o[, nc := {
    m <- as.matrix(.SD)
    m[cbind(seq.int(.N), max.col(!is.na(m), "first"))]
}]
o[, names(o) := lapply(.SD, as.integer)][, 
    nc := fcoalesce(.SD)]