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

R中带规则的分栏

  •  0
  • jhyeon  · 技术社区  · 7 年前

    我想用这条规则做一个专栏: ....

    这就是我想要的例子

    Y2000 Y2001 Y2003 S2000 S2001 S2003 | NEW2000 NEW2001 NEW2003
      5     10    15    1     5     15  |  5/1=5  10/5=2 15/15=1 
    

    我尝试在dplyr包中使用mutate,但我不熟悉它的功能。 如何在R中生成代码。。。?

    2 回复  |  直到 7 年前
        1
  •  1
  •   CPak    7 年前

    以下是如何为许多专栏(年)做这件事

    您的数据

    df <- data.frame(Y2000=5, Y2001=10, Y2003=15, S2000=1, S2001=5, S2003=15)
    

    定义新列名

    newcols <- sapply(c(2000,2001,2003), function(i) paste0("NEW",i))
    [1] "NEW2000" "NEW2001" "NEW2003"
    

    使用 dplyr

    library(dplyr)
    df1 <- df %>%
              rowwise() %>%
              mutate_(.dots = setNames(paste0(gsub("NEW","Y",newcols),"/",gsub("NEW","S",newcols)), newcols))
    

      Y2000 Y2001 Y2003 S2000 S2001 S2003 NEW2000 NEW2001 NEW2003
    1     5    10    15     1     5    15       5       2       1
    
        2
  •  1
  •   Andrew Brēza    7 年前

    下面是如何计算所需输出中的三列。

    library(dplyr)
    your_data %>%
      mutate(
        NEW2000 = Y2000 / S2000,
        NEW2001 = Y2001 / S2001,
        NEW2003 = Y2003 / S2003
      )
    

    如果您有数百个这样的列,有一些方法可以避免键入每个列的名称。