R语言如何实现数据框每行数值除以指定列col4的对应行值
方法1:基础R实现(无需加载额外包)
推荐使用sweep函数实现按行批量运算,逻辑清晰不易出错:
# 按行将所有列除以对应行的col4值 result <- sweep(data_frame, MARGIN = 1, STATS = data_frame$col4, FUN = "/") # 按需对col1-col3保留2位小数,匹配期望输出格式 result[, 1:3] <- round(result[, 1:3], 2)
也可以用转置运算实现更简洁的写法:
result <- as.data.frame(t(t(data_frame) / data_frame$col4)) result[, 1:3] <- round(result[, 1:3], 2)
方法2:dplyr包实现(适合tidyverse生态用户)
如果日常使用tidyverse系列工具,可以用行分组+跨列突变的写法,可读性更高:
library(dplyr) result <- data_frame %>% rowwise() %>% # 按行分组 mutate(across(col1:col4, ~ .x / col4)) %>% # 所有列除以当前行的col4值 ungroup() %>% # 取消行分组避免后续运算出错 mutate(across(col1:col3, ~ round(.x, 2))) # 保留两位小数
以上两种方法输出的结果都和你给出的期望输出完全匹配,如果数据框中存在非数值列,操作前需先筛选出数值列再执行除法运算,避免报错。
内容的提问来源于stack exchange,提问作者user11916948
相关产品推荐
相关产品推荐

