Разделение строки на другой столбец - PullRequest
0 голосов
/ 25 октября 2018

Я хотел бы разделить переменную с именем country, учитывая, есть ли в ней год (Албания2009 против Албании).

Кроме того, если переменная не имеет года (т. Е. Албании), я хотел бы скопировать название страны в cname и вручную указать год в cyear.

   idstd   id    xxx        id1        country 
   <dbl+>   <dbl> <dbl+lbl> <dbl+lbl>   <chr>
 1 445801   NA      NA       7          Albania2009 
 2 542384 4616555 1163       7          Albania  
 3 445801   NA      NA       7          Albania2009 
 4 542384 4616555 1163       7          Albania  

Я впервые попробовал себя, используя тот факт, что id - это NA, когда страна имеет год:

CAmerica0306P$cyear <- NA
CAmerica0306P$cname <- NA
for (i in 1:nrow(df)) {
if (df$id[i]==NA) {
df[i,] <- separate(df, country[i], into = c("cname", "cyear"), -4)
} else {
df$cyear[i,] <- 2001
df$cname[i,] <- df$country[i,]
}
}

Но это разделяет все.После проверки переполнения стека я попытался:

df <- df %>% 
    extract(country, into=c("cname", "cyear"), regex="^(?=.{1,7}$)([a-zA-Z]+)([0-9].*)$", remove=FALSE)

, но он не заполняет ячейки (все еще NA).

Желаемый вывод:

   idstd   id    xxx        id1        country   cyear cname
   <dbl+>   <dbl> <dbl+lbl> <dbl+lbl>   <chr>   <dbl>
 1 445801   NA      NA       7          Albania  2009 Albania  
 2 542384 4616555 1163       7          Albania  2001 Albania  
 3 445801   NA      NA       7          Albania  2009 Albania  
 4 542384 4616555 1163       7          Albania  2001 Albania  

Есть предложения?

1 Ответ

0 голосов
/ 25 октября 2018

Пример данных: (вы должны предоставить готовые данные)

df1<-
data.frame(country = I(paste0("Albania",c("",2007:2012,""))) )

код:

df1$cname <-sub("\\d+$","", df1$country)      #remove all numbers in the end

df1$cyear <-gsub("[^0-9]","", df1$country)    #remove everything that is not a number
df1$cyear[df1$cyear == ""] <- 2001            #where no year is prominent insert 2001

df1$country<- df1$cname

результат:

#  country   cname cyear
#1 Albania Albania  2001
#2 Albania Albania  2007
#3 Albania Albania  2008
#4 Albania Albania  2009
#5 Albania Albania  2010
#6 Albania Albania  2011
#7 Albania Albania  2012
#8 Albania Albania  2001
...