R语言中按行索引对两个DataFrames做减法并保留df1独有行
R语言按行索引实现两个DataFrame减法操作
需求说明
对两个DataFrame按照行索引执行减法,规则如下:
- 两个数据框都存在的行索引,对应位置数值相减
- df1中存在但df2中不存在的行,直接保留df1的原始值
测试数据示例
# 原始测试数据 df1 <- data.frame(V1=c(0,1,3,5,1,6), V2=6:11, V3=6:11) df2 <- data.frame(V1=1:5, V2=c(0,1,3,5,1), v3=rep(0, 5))
期望输出
> df V1 V2 V3 1 -1 6 6 2 -1 6 7 3 0 5 8 4 1 4 9 5 -4 9 10 6 6 11 11
实现方法
操作步骤
- 先统一两个数据框的列名(解决示例中df2第三列
v3小写与df1V3不匹配的问题) - 对齐列顺序,确保两个数据框列的计算逻辑一致
- 将df2扩展到和df1相同的行数,缺失的行填充0
- 直接执行两个数据框的减法运算即可得到结果
完整代码
# 1. 统一列名并对齐列顺序 colnames(df2) <- colnames(df1) df2 <- df2[, colnames(df1)] # 2. 扩展df2到和df1相同行数,缺失行填充0 df2_pad <- df2[1:nrow(df1), ] df2_pad[is.na(df2_pad)] <- 0 # 3. 执行减法 res <- df1 - df2_pad # 打印验证结果 print(res)
内容的提问来源于stack exchange,提问作者Jaroslav Kotrba
相关产品推荐
相关产品推荐

