【问题标题】:create a new column with a given initial value [duplicate]创建具有给定初始值的新列[重复]
【发布时间】:2019-06-25 10:27:03
【问题描述】:

我想创建一个新列,给它一个初始值 G,后跟 2 * G

我认为 dplyr合适

mutate (df, newcol = ) 

MS Excel 中,对于 B 列,它类似于 *G, B2*sqrt(2), B3* sqrt(2) 等等*。现在我想用 R 来做。任何帮助/评论表示赞赏。

【问题讨论】:

  • 您能否添加一个小的可重现示例以及预期输出?

标签: r dplyr


【解决方案1】:

我认为您正在寻找累积产品

df$b <- cumprod(df$b)

# a        b
#1 a 1.414214
#2 b 2.000000
#3 c 2.828427
#4 d 4.000000
#5 e 5.656854

或者,如果您想做一些更复杂的事情,请使用 Reduce 和您的自定义函数

Reduce(`*`, df$b, accumulate = TRUE)
#[1] 1.414214 2.000000 2.828427 4.000000 5.656854

数据

df <- data.frame(a = letters[1:5])
df$b <- sqrt(2)

【讨论】:

    【解决方案2】:

    您只需要指定要应用的公式的列和逻辑:

    data<- data.frame(Col1 = 1:10)
    data %>% mutate(Col2 = sqrt(2)**Col1)
          Col1      Col2
    1     1  1.414214
    2     2  2.000000
    3     3  2.828427
    4     4  4.000000
    5     5  5.656854
    6     6  8.000000
    7     7 11.313708
    8     8 16.000000
    9     9 22.627417
    10   10 32.000000
    

    按照@Ronak 的逻辑,你也可以这样做cumprod() 如下:

    data<- data.frame(Col1 = rep(sqrt(2),10))
    data %>% mutate(Col2 = cumprod(Col1))
           Col1      Col2
    1  1.414214  1.414214
    2  1.414214  2.000000
    3  1.414214  2.828427
    4  1.414214  4.000000
    5  1.414214  5.656854
    6  1.414214  8.000000
    7  1.414214 11.313708
    8  1.414214 16.000000
    9  1.414214 22.627417
    10 1.414214 32.000000
    

    【讨论】:

    • 谢谢你。是否可以只创建 Col2 并给出初始值 1.41,然后与 sqrt(2) 相乘,从而得到 1.99、2.82、3.99...
    • 我已经重新编辑了我的答案,让您看到几种方法
    猜你喜欢
    • 2018-10-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2016-08-22
    相关资源
    最近更新 更多