假设我有以下内容
dt <- data.table(a=c(T,T,F,F), b= c(T,F,T,F))
Run Code Online (Sandbox Code Playgroud)
返回,
a b
1: TRUE TRUE
2: TRUE FALSE
3: FALSE TRUE
4: FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用function(x) min(which(x))来确定TRUE中每一行的第一行dt,但没有奏效。我期望的结果将是
a b index
1: TRUE TRUE 1
2: TRUE FALSE 1
3: FALSE TRUE 2
4: FALSE FALSE 9999
Run Code Online (Sandbox Code Playgroud)
,其中索引列表示第一个的位置,TRUE当该行仅包含 FALSE 时使用 9999
仅供参考:在真实数据中,我有大约 50 列包含 TRUE 和 FALSE
你能给我建议吗?
对于 50 列,最好使用 max.col
dt$index <- max.col(dt, 'first') *(!!rowSums(dt))
Run Code Online (Sandbox Code Playgroud)
或者正如@David Arenburg 所提到的,更惯用的代码是
dt[, indx := max.col(.SD,ties.method="first")*(!!rowSums(.SD))]
Run Code Online (Sandbox Code Playgroud)
如果我们需要 9999
(max.col(dt)*(!!rowSums(dt))) + (!rowSums(dt))*9999
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1801 次 |
| 最近记录: |