2016-08-14 23 views
0

Rの2つの列の値を比較したいとします。損傷のない日数(dfd)が合計日数列(TotalDays)より大きい場合、年齢へのdfy値(これは日数です) - 合計日数。2つの列を比較して値を置き換えます。

これについてさまざまな質問がありましたが、これまでのところ何も動作していないようです。もし誰かが助けてくれたら本当に感謝しています!私が達成したいものの

Example columns: 

dfy  TotalDays age  
7305.00 2872.21  10261 
2556.75 3001.43  10210 
3215.31 2941.87  12931 

例: (DFYは年齢で置き換えられている - TotalDays)

dfy  TotalDays age 
7433.79 2872.21  10261 
2556.75 3001.43  10210 
9988.13 2941.87  12931 

再現コード:

df <- data.frame(dfy=c(7305.00,2556.75,3215.31), 
      TotalDays = c(2872.21, 3001.43, 2941.87), age = c(10261, 10210, 12931)) 

答えて

3

我々は論理vectorを作成し、置き換えることができます'dfy'の要素は、vectorに対してTRUEです。代わりに、高速オプションを割り当てることによってdata.tableを使用することになる

i1 <- with(df, TotalDays < dfy) 
df$dfy[i1] <- with(df, age[i1] - TotalDays[i1]) 

:=

library(data.table) 
setDT(df)[TotalDays < dfy, dfy := age - TotalDays] 
関連する問題