如何用列间除法替换tibble指定列的值(无需使用mutate)
问题分析与解决
你的代码只是计算出了x2至x5列除以x1列的结果,但没有将计算结果赋值回原数据框,所以原数据x不会有任何变化,这就是代码没达到预期效果的原因。
可行解决方案
方法1:直接索引赋值
通过索引定位目标列,将运算结果赋值回去,直接修改原数据框:
x <- tibble( x1 = rep(2,10), x2 = rep(5,10), x3 = rep(5,10), x4 = rep(5,10), x5 = rep(5,10) ) # 赋值替换目标列 x[, 2:5] <- x[, 2:5] / x[, 1]
方法2:用dplyr的across修改原列(无需新建列)
如果你习惯tidyverse语法,用mutate()配合across()可以直接修改指定列,不会生成新列,同样符合你的需求:
library(dplyr) x <- tibble( x1 = rep(2,10), x2 = rep(5,10), x3 = rep(5,10), x4 = rep(5,10), x5 = rep(5,10) ) x <- x %>% mutate(across(2:5, ~ .x / x1))
内容的提问来源于stack exchange,提问作者Jorge Hernández
相关产品推荐
相关产品推荐

