【问题标题】:R: How to calculate value in computed field column in RR:如何计算 R 中计算字段列中的值
【发布时间】:2017-07-10 17:24:07
【问题描述】:

我有以下数据框:数据框有超过 1000 行,我需要使用最后 3 列更新列 P1-P9。

P1  P2  P3  P4  P5  P6  P7  P8  P9  Noofmonths  divamount   beginingMonth
0   0   0   0   0   0   0   0   0   3           29948.333   4
0   0   0   0   0   0   0   0   0   3           29766.667   4
0   0   0   0   0   0   0   0   0   3           1778.667    4
0   0   0   0   0   0   0   0   0   2           2595.6      3

条件:

if beginingMonth = 4 then select Noofmonths.
if Noofmonths= 3 then P4 = divamount, P5 = divamount, p6 = divamount

if beginingMonth = 1 then select Noofmonths.    
if Noofmonths= 1 then P1 = divamount

if beginingMonth = 2 then select Noofmonths.    
if Noofmonths= 2 then P2 = divamount, P3 = divamount.

【问题讨论】:

  • 这样的问题已经被问过(并回答)了很多次。用搜索引擎搜索“R dataframe 条件替换”。
  • 查看可以嵌套的ifelse。报告任何问题。

标签: r loops with-statement


【解决方案1】:

这是您的sql-esque 查询的data.table 实现:

library(data.table)

your_dt = data.table(your_df)

your_dt[beginingMonth == 4 & Noofmonths == 3,
        .(P4=divamount, P5=divamount, P6=divamount)]

【讨论】:

  • 谢谢大家找到处理这个问题的方法。基本上我需要使用 9 个更新语句。 P1 到 P9 各一个。
【解决方案2】:

您可以使用ifelse,也可以使用逻辑索引,请参阅 R-intro.pdf,第 2.4 和 2.7 节。

inx <- dat$beginingMonth == 4 & dat$Noofmonths == 3
dat$P4[inx] <- dat$P5[inx] <- dat$P6[inx] <- dat$divamount[inx]

inx <- dat$beginingMonth == 1 & dat$Noofmonths == 1
dat$P1[inx] <- dat$divamount[inx]

inx <- dat$beginingMonth == 2 & dat$Noofmonths == 2
dat$P2[inx] <- dat$P3[inx] <- dat$divamount[inx]

【讨论】:

    【解决方案3】:

    如果你对 sql 感兴趣。使用包“sqldf”为上述编写 sql 查询。支持通用 sql。 install.packages("sqldf") sqldf::sqldf("query")

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      相关资源
      最近更新 更多