用R中的规则划分列

时间:2017-07-19 11:36:01

标签: r dplyr multiple-columns divide mutate

我想根据这条规则制作一个专栏: Y2000 / S2000 = NEW2000 ....

这就是我想要的例子

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 个答案:

答案 0 :(得分:1)

以下是计算所需输出中三列的方法。

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

如果你有数百个这样的列,有办法避免必须输入每个列的名称。

答案 1 :(得分:1)

这里有甚至很多列(年)的方法

您的数据

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