You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用dplyr定位数据框中右侧全为0的最左零值列

问题:识别每行最左侧且右侧全为0的零值列

原始数据构造

首先构造示例数据框:

library(tidyverse)

df <- data.frame(v1=c(0,1), v2=c(0,1),v3=c(0,1), v4=c(0,1)) %>% 
  expand(v1, v2, v3, v4)

原始数据输出:

# A tibble: 16 x 4
    v1    v2    v3    v4
   <dbl> <dbl> <dbl> <dbl>
 1     0     0     0     0
 2     0     0     0     1
 3     0     0     1     0
 4     0     0     1     1
 5     0     1     0     0
 6     0     1     0     1
 7     0     1     1     0
 8     0     1     1     1
 9     1     0     0     0
10     1     0     0     1
11     1     0     1     0
12     1     0     1     1
13     1     1     0     0
14     1     1     0     1
15     1     1     1     0
16     1     1     1     1

需求说明

为每行识别出最左侧的零值列,且该列右侧所有列均为0,不满足条件的行结果返回NA,预期输出需新增result列存储结果。

tidyverse 解决方案

使用rowwise()按行处理,结合循环判断条件:

df_result <- df %>%
  rowwise() %>%
  mutate(
    result = {
      # 获取当前行的所有列值和列名
      row_vals <- c_across(everything())
      col_names <- names(row_vals)
      
      # 从左到右遍历每个列位置
      for (i in seq_along(row_vals)) {
        # 判断当前列是0,且右侧所有列均为0
        if (row_vals[i] == 0 && all(row_vals[i:length(row_vals)] == 0)) {
          return(col_names[i])
        }
      }
      # 无满足条件的列时返回NA
      return(NA_character_)
    }
  ) %>%
  ungroup()

输出结果

运行后得到符合预期的结果:

# A tibble: 16 x 5
      v1    v2    v3    v4 result
   <dbl> <dbl> <dbl> <dbl> <chr> 
 1     0     0     0     0 v1    
 2     0     0     0     1 NA    
 3     0     0     1     0 v4    
 4     0     0     1     1 NA    
 5     0     1     0     0 v3    
 6     0     1     0     1 NA    
 7     0     1     1     0 v4    
 8     0     1     1     1 NA    
 9     1     0     0     0 v2    
10     1     0     0     1 NA    
11     1     0     1     0 v4    
12     1     0     1     1 NA    
13     1     1     0     0 v3    
14     1     1     0     1 NA    
15     1     1     1     0 v4    
16     1     1     1     1 NA    

内容的提问来源于stack exchange,提问作者Rajswa23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:42:30