代码之家  ›  专栏  ›  技术社区  ›  anderwyang

在r/dplyr中,如何根据现有变量批量添加新变量

  •  0
  • anderwyang  · 技术社区  · 2 年前

    有原始数据,如何添加新的变量作为附加图像中的黄色区域?

    library(tidyverse)
    raw_data <- data.frame(
      Category=c("A","B","C","D","E","F","G"),
     Amount=c(19,14,19,11,2,11,13),
     Ad=c(0.73,0.78,0.37,0.32,0.62,0.76,0.25),
     ST=c(0.54,0.74,0.86,0.57,0.98,0.58,0.35),
     WT=c(0.3,0.2,0.94,0.9,0.75,0.39,0.23),
     MM=c(0.79,0.35,0.87,0.76,0.74,0.55,0.72))
    

    下面的代码可以正确返回计算结果,但当前变量被替换,变量名称不是我想要的。 我知道我们可以单独(一步一步)添加新变量,有什么方便的方法吗?谢谢

    raw_data %>% mutate(Amount=as.character(Amount)) %>% 
      mutate(across(where(is.numeric),  ~ . * as.numeric(Amount)))
    

    enter image description here

    1 回复  |  直到 2 年前
        1
  •  1
  •   DPH    2 年前

    我想您只需要Cross函数的names参数:

    raw_data %>% 
        mutate(Amount=as.character(Amount)) %>% 
        mutate(across(where(is.numeric),  ~ . * as.numeric(Amount), .names = "{col}_AMOUNT"))
    
      Category Amount   Ad   ST   WT   MM Ad_AMOUNT ST_AMOUNT WT_AMOUNT MM_AMOUNT
    1        A     19 0.73 0.54 0.30 0.79     13.87     10.26      5.70     15.01
    2        B     14 0.78 0.74 0.20 0.35     10.92     10.36      2.80      4.90
    3        C     19 0.37 0.86 0.94 0.87      7.03     16.34     17.86     16.53
    4        D     11 0.32 0.57 0.90 0.76      3.52      6.27      9.90      8.36
    5        E      2 0.62 0.98 0.75 0.74      1.24      1.96      1.50      1.48
    6        F     11 0.76 0.58 0.39 0.55      8.36      6.38      4.29      6.05
    7        G     13 0.25 0.35 0.23 0.72      3.25      4.55      2.99      9.36