2017-07-10 211 views
0

我有以下數據框:數據框有1000多行,我需要使用最後3列更新列P1-P9。R:如何計算計算字段列中的值R

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. 
+1

這樣的問題已經有很多次被問及(並回答過)了。用搜索引擎搜索「R數據幀條件替換」。 – tagoma

+1

看看可以嵌套的'ifelse'。回報任何問題。 – Parfait

回答

1

這裏是一個data.table實現你sql -esque查詢:

library(data.table) 

your_dt = data.table(your_df) 

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

謝謝大家找到解決辦法。基本上會有9個更新聲明我需要使用。每個P1到P9一個。 – Kumar

0

您可以使用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] 
0

如果你感興趣的SQL。使用包「sqldf」來編寫上面的sql查詢。支持通用的sql。 install.packages("sqldf") sqldf::sqldf("query")