根据条件将stringA或stringB添加到列中的值

时间:2018-08-23 09:57:49

标签: r

我有一个数据表“日期”,例如:

dates <- data.frame(date1=c("2015","1998","2000","1991"),
        date2=c("98","00","18","92"))
dates <- mutate_if(dates,is.factor,as.character)

“日期”中的值属于-char类

我要使“ date2”为4位数字。为此,我希望满足以下条件:

  • 如果“ date2”以9开头,则在值之前添加19
  • 如果“ date2”以其他任何内容开头,请添加20

我已经做了很多研究,但是我找不到如何使用条件

将字符串添加到已经存在的字符串中的方法

事后思考:我们如何处理“ NA”值,这样它就不会为“ NA´s”分配“ 19”或“ 20”

2 个答案:

答案 0 :(得分:1)

无正则表达式的替代项:

d2int <- as.integer(dates$date2)
dates[["date2n"]] <- as.character(d2int + ifelse(d2int > 18, 1900, 2000))
dates
  date1 date2 date2n
1  2015    98   1998
2  1998    00   2000
3  2000    18   2018
4  1991    92   1992
5  2015    89   1989
6  1998    18   2018
7  2000    19   1919
8  1991    NA   <NA>

位置:

dates <- data.frame(
  date1=c("2015","1998","2000","1991"),
  date2=c("98","00","18","92", "89", "18", "19", "NA"),
  stringsAsFactors = FALSE
)

答案 1 :(得分:0)

您可以使用lubridate并尝试类似的操作:

输入:

dates <- data.frame(date1=c("2015","1998","2000","1991", "1991", "1991"),
                    date2=c("98","00","18","92", "88", NA))

使用:

dates %>%
  mutate(date2 = as.integer(date2)) %>%
  mutate(date3 = if_else(date2+2000 > year(today()), date2+1900, date2+2000))

给出:

  date1 date2 date3
1  2015    98  1998
2  1998     0  2000
3  2000    18  2018
4  1991    92  1992
5  1991    88  1988
6  1991    NA    NA

p.s。在输入数据中添加了两行,以显示其如何处理NA