根据条件更改字符串

时间:2017-04-05 13:50:52

标签: r string

我有一个类似下面的数据框。

我想在year变量的字符串开头添加一个字符,该字符将根据第一个字符变化。

year <- c("991", "990", "985", "975", "001", "003")
name <- c("John", "Anna", "Amy", "Sarah", "Bob", "John")

test <- data.frame(year, name)

条件是:

  • 如果字符串中的第一个字母== 9,则添加&#34; 1&#34;在它面前,
  • 如果字符串中的第一个字母== 0,则添加&#34; 2&#34;在它面前
  • 否则添加&#34; 7&#34;

不确定是否有办法结合for循环和strsplit来解决这个问题?

我的观点:

  paste0(strsplit(test$year, '')[[1]][1], collapse = '')

有了这个,我得到了第一行的第一个字符,但我不知道如何把它放在一个循环中,而不是在其中添加一个条件。

2 个答案:

答案 0 :(得分:2)

这是一个嵌套的ifelse语句,

ifelse(substring(test$year, 1, 1) == 9, paste0(1, test$year), 
       ifelse(substring(test$year, 1, 1) == 0, paste0(2, test$year), paste0(7, test$year)))
#[1] "1991" "1990" "1985" "1975" "2001" "2003"

答案 1 :(得分:1)

library(data.table)
library(stringr)
setDT(test)

test[str_detect(year, "^0"), new := paste0("2", year)]
test[str_detect(year, "^9"), new := paste0("1", year)]