2016-08-05 15 views
0

私はRを初めて使っています。私は自分の質問に対する答えを探しましたが、R ifelse本当のセクション/ ifelseでコマンド以上のものが実際にTRUEのときFalseを返す

私はdata.table次き:

data2 <- fread("file.txt", header = T, sep= "|", quote = "^" stringsAsFactors=FALSE); 

Accounts_filed_date Incorporation_Date 
     2015-08-25   1863-05-01 
     2016-06-28   1863-07-16  
     2016-06-29   1863-12-29 
     2015-12-10   1880-08-17 

Y <- function(incorporation_date, accounts_filled_date) 
{timee <-Sys.Date()-incorporation_date;timee <- as.numeric(timee); 
    if(timee/365 <2){y=0; return(y)} 
    else{x <- as.Date(format(accounts_filled_date, "%2016-%m-%d")); 
    + x <- Sys.Date()- x; 
    + x <- as.numeric(x); 
    + if(x<274) {y <-timee/365; return(pmax(pmin(y,5),0))} 
    + else{y<-timee/365-1; return(pmax(pmin(y,5),0))}}} 

data2[, c("Y") := Y(Incorporation_Date, Accounts_filed_date), with = FALSE] 

しかし、incorporation_dateとaccounts_filled_dateはベクトルであるため、動作しないこと。

私はifelseを試みたが、次のコードで:

Y <- function(incorporation_date, accounts_filled_date) 
{timee <- Sys.Date()-incorporation_date;timee <- as.numeric(timee); 
timee<- timee/365; 
ifelse(timee<2,y=0, 
     x<-as.Date(format(accounts_filled_date, "%2016-%m-%d")); 
     x <-Sys.Date()- x; 
     x <- as.numeric(x); 
     ifelse(x<274,y <-timee, y<- timee-1)); 
return(pmax(pmin(y,5),0))} 

次の値を返します。

Error: unexpected ';' in "Y <- function(incorporation_date, accounts_filled_date) {timee <- Sys.Date()-incorporation_date;timee <- as.numeric(timee); timee <- timee/365;ifelse(timee<2,y=0,x 

基本的に、私の質問は次のとおりです。 どのように私は1つのアクションよりも多くを含むことができ、 ifelseステートメントの「偽」部分ですか?

UPDATE

Y <- function(incorporation_date, accounts_filled_date) 
{timee <- Sys.Date()-incorporation_date;timee <- as.numeric(timee); 
timee2<- timee/365; 
timee2 <- as.integer(timee2); 
x<-as.Date(format(accounts_filled_date, "%2016-%m-%d")); 
    x <- Sys.Date()- x; 
    x <- as.numeric(x); 
ifelse**(timee2 <= 2,** y<-0, ifelse(x<274,y <-timee2, y<- timee2-1)); 
return(pmax(pmin(y,100),0))} 

これは、時間= 2 <、ビットを除き、動作します。私は二重チェックをしました - それは2より小さい値を返します、ちょうど論理がFALSEを返します。助言がありますか?

+1

は、なぜあなたはセミコロンを使用している(;)とプラス(+)?これらは、ベースRには(これまであったとしても)まれにしかありません。 – lmo

+0

複数のアクションを実行する唯一の方法はありませんか? + sは、.txtドキュメントにコードの一部を保存することによって発生します。 –

+1

これが必要な場合は、コードブロックを '{} 'で囲むことは良い方法です。しかし、コーディングロジックを修正する必要があるようです。まず、条件に関係なくxを作成します( 'timee <2')。これにより、問題が大幅に簡素化されます。 'ifelse(x <274、y <-timee、y < - timee-1)'は 'y < - ifelse(x <274、timee)のように見えるはずです。 、timee-1)) 'となり、' y < - timee - (x <274) 'となる可能性もあります。 – lmo

答えて

0

再配置文は論理をキャプチャ:

Y <- function(incorporation_date, accounts_filed_date) 
{timee <- Sys.Date()-incorporation_date;timee <- as.numeric(timee); 
    timee2<- timee/365; 
    x<-as.Date(format(accounts_filed_date, "%2016-%m-%d")); 
    x <- Sys.Date()- x; 
    x <- as.numeric(x); 
    y <- ifelse(timee2 <= 2, 0,ifelse(x < 274, timee2, timee2-1)); 
    return(pmax(pmin(y,5),0))} 
関連する問題