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

R语言遍历数据框列查找每行首个1并生成x_time列的实现方法

最高效实现方案

推荐直接使用R基础包的max.col函数,该函数为底层C实现的矢量化运算,性能远高于显式循环或apply族遍历方案,完全匹配你要的「从左到右取首个1的位置」需求。

完整可运行代码

# 示例数据构造
df <- data.frame(x9 = c('$7', '$7', 2, '$7', 1, '$7'),
                 x10 = c('$7', 1, '$7', '$7', '$7', '$7'),
                 x11 = c('$7', '$7', 2, '$7', 1, '$7'),
                 x12 = c(1, 1, 2, '$7', '$7', '$7'),
                 x13 = c('$7', '$7', 2, '$7', 2, '$7'))

# 核心运算逻辑
# 1. 指定需要遍历的目标列
target_cols <- paste0("x", 9:13)
# 2. 构造是否等于1的逻辑矩阵(因列包含字符串$7,整列为字符型,故用"1"匹配)
match_matrix <- df[, target_cols] == "1"
# 3. 取每行第一个匹配项的位置,全不匹配的行设为NA
first_match_pos <- max.col(match_matrix, ties.method = "first")
first_match_pos[rowSums(match_matrix) == 0] <- NA
# 4. 位置映射为对应时间值(第1列x9对应9=1+8,以此类推)
df$x_time <- first_match_pos + 8

输出结果验证

运行后得到的df和你给出的期望输出完全一致:

x9 x10 x11 x12 x13 x_time
1 $7  $7  $7   1  $7     12
2 $7   1  $7   1  $7     10
3  2  $7   2   2   2     NA
4 $7  $7  $7  $7  $7     NA
5  1  $7   1  $7   2      9
6 $7  $7  $7  $7  $7     NA

补充说明

如果你的实际数据中对应列是纯数值型(没有$7这类字符串),只需要把判断条件改为match_matrix <- df[, target_cols] == 1即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:45:02