2016-08-09 4 views
1

既存の変数から新しい変数を作成しようとしていて、それが条件を満たすとします。既存の変数から新しい変数を条件付きで作成する

startyear endyear ongoingasofyear imposition 
    (dbl) (dbl)   (dbl)  (dbl) 
1  1945 1947    NA   1 
2  1946 1949    NA   1 
3  1946 1993    NA   1 
4  1946 1960    NA   1 
5  1946 1946    NA   1 
6  1946  NA   1946   1 

私はsanctions_periodという変数を作成します。私はそれが初年度から範囲内にあることを望みます - それらが利用可能な場合は期限が来てから、初年度の範囲 - 終了年度がNAで、継続中の期間がNAでない場合は継続します。

これは、それがどのように見えるかです:

 startyear endyear ongoingasofyear imposition sanctions_period 
    (dbl) (dbl)   (dbl)  (dbl) 
1  1945 1947    NA   1  1945-1947 
2  1946 1949    NA   1  1946-1949 
3  1946 1993    NA   1  1946-1993 
4  1946 1960    NA   1  1946-1960 
5  1946 1946    NA   1  1946-1946 
6  1946  NA   1946   1  1946-ongoing 

は、どのように私はこれをやって行くのでしょうか?私はifelseとは異なる設定を試みましたが、これまで成功していませんでした。ありがとう!

答えて

0

我々は「tbl_df」を使用しているとして、dplyrと1つのオプションは一緒に列をするとifelse条件は「endyear」内のNAの要素を考慮するために使用することができますpastemutateを使用して変数を作成することです。

library(dplyr) 
df1 %>% 
    mutate(sanctions_period = ifelse(is.na(endyear) & !is.na(ongoingasofyear), 
     paste(startyear, "ongoing", sep="-"), paste(startyear, endyear, sep="-"))) 
#  startyear endyear ongoingasofyear imposition sanctions_period 
#1  1945 1947    NA   1  1945-1947 
#2  1946 1949    NA   1  1946-1949 
#3  1946 1993    NA   1  1946-1993 
#4  1946 1960    NA   1  1946-1960 
#5  1946 1946    NA   1  1946-1946 
#6  1946  NA   1946   1  1946-ongoing 
+1

私のために働いた、ありがとう! –

+0

endyearとongoingasofyearの両方がNAである場合、それを削除するにはどうすればいいですか? –

+0

@ jo.magi次に、列を作成する前にデータセットを最初にサブセット化することができました。つまり、df1%>%filter(!(is.na(endyear)&is.na(ongoingasofyear))%>%mutate(sanctions_period = if_else(is.na(endyear)&!is.na(ongoingasofyear)、paste sep = " - ")、paste(startyear、endyear、sep = " - "))) ' – akrun

関連する問題