使用条件从现有变量创建新变量

时间:2016-08-09 09:03:21

标签: r

我正在尝试从现有变量创建一个新变量,并且它满足条件。

  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

我想创建一个名为penal_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不同的设置,但到目前为止还没有成功。谢谢!

1 个答案:

答案 0 :(得分:0)

由于我们正在使用' tbl_df',dplyr的一个选项是使用mutate创建变量,paste将列合并在一起ifelse条件可用于计算' endyear'中的NA元素。

 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