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

如何在满足前一行全为NA的条件下为DataFrame添加score列

R语言:按规则为DataFrame生成score列

原始数据

df = data.frame(x =c(letters[1:3],NA,NA,'part1',letters[4:5],NA,NA,'part2',letters[6:7]),
                y = c('p1','p2','p3',NA,NA,'---','p4','p5',NA,NA,'---','p6','p7') )

z = 5:6

需求说明

需要为上述DataFrame新增名为score的列,满足以下规则:

  • 当x列值为part1时,score赋值为5;x列值为part2时,score赋值为6
  • 仅当part所在行的前两行(当前行的前两个位置)的x和y列均为NA时,才赋予上述值,否则该行score仍为NA
  • 其余所有行的score值为NA

解决方案

通过行索引匹配、条件判断实现,代码如下:

# 初始化score列为全NA
df$score <- NA

# 定位part1和part2的行索引
part1_idx <- which(df$x == 'part1')
part2_idx <- which(df$x == 'part2')

# 检查part1前两行是否全为NA,满足则赋值
if (all(is.na(df[part1_idx - 1, ])) && all(is.na(df[part1_idx - 2, ]))) {
  df$score[part1_idx] <- z[1]
}

# 检查part2前两行是否全为NA,满足则赋值
if (all(is.na(df[part2_idx - 1, ])) && all(is.na(df[part2_idx - 2, ]))) {
  df$score[part2_idx] <- z[2]
}

运行后得到预期输出:

print(df)
#        x    y score
# 1      a   p1    NA
# 2      b   p2    NA
# 3      c   p3    NA
# 4   <NA> <NA>    NA
# 5   <NA> <NA>    NA
# 6  part1  ---     5
# 7      d   p4    NA
# 8      e   p5    NA
# 9   <NA> <NA>    NA
# 10 <NA> <NA>    NA
# 11 part2  ---     6
# 12     f   p6    NA
# 13     g   p7    NA

逻辑说明

  1. 先初始化score列为全NA,确保不符合条件的行默认值正确
  2. 用which()定位part1和part2的行位置
  3. 分别验证两个位置的前两行是否满足全NA条件,符合则从向量z中取出对应值赋值给score列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:55:11