【问题标题】:Dividing column with rule in R在R中用规则划分列
【发布时间】:2017-07-19 11:36:00
【问题描述】:

我想用这个规则做一个特定的列: 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... 中编写代码?

【问题讨论】:

  • 啊,我想.... NEW2000 到 NEW2030 所以我想使用循环或任何其他功能..

标签: r multiple-columns divide dplyr


【解决方案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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 啊,我想...... NEW2000 到 NEW2030 所以我想使用循环或任何其他功能......
    • 更好的选择是base R,即... your_data[paste0("NEW", 2000:2002)] &lt;- your_data[1:3]/your_data[4:6]
    • @akrun 是正确的,如果你想使用基础 R。这个例子更容易推广到 n 数据列。
    猜你喜欢
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2021-03-23
    • 2020-03-26
    相关资源
    最近更新 更多