2017-04-05 90 views
0

我有一個像下面的數據框。根據條件更改字符串

我想在年份變量中的字符串開頭添加一個字符,該字符會根據第一個字符進行變化。

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

test <- data.frame(year, name) 

條件將是:

  • 如果在字符串== 9的第一個字母,比在它的前面加 「1」,
  • 如果在字符串中的第一個字母== 0 ,比它
  • 否則前面加「2」加「7」

不知道是否有是結合一個for循環和strsplit解決此問題的方法?

我attemnt:

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

有了這個,我得到了第一排的第一個字符,但林不知道如何把這個循環,而且比添加條件裏面。

回答

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" 
+0

感謝。它解決了這個問題。 – Prometheus

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)]