2017-11-15 3 views
0

Ein Beispiel für mydataframe ist dies:Bedingtes verschiedene Teilzeichenfolge einfügen je nach Spaltenname

datatimedf = data.frame(time_start_1 = c('Apr 2005', '2004', '2000', 'Mar 2011'), time_end_1 = c('Apr 2012', '2011', 'Oct 2001', '2012')) 

Einige Werte in diesen Spalten Jahr und Monat, andere nur Jahr. Wenn eine Zelle nur das Jahr hat (Monat fehlt), möchte ich einen Monatswert einfügen.

Der einzugebende Monat hängt von der Spalte ab: Wenn er in der Spalte time_start_1 steht, geben Sie "Jan" ein, und wenn er in der Spalte time_end_1 steht, fügen Sie "Dec" ein.

Beispiel der erwarteten Ausgabe:

datatimedf = data.frame(time_start_1 = c('Apr 2005', 'Jan 2004', 'Jan 2000', 'Mar 2011'), time_end_1 = c('Apr 2012', 'Dec 2011', 'Oct 2001', 'Dec 2012')) 
+1

Ich haben bin verwirrt, soll "time_start_1" "vorherige Startzeit" oder "aktuelle Startzeit" sein? Welche Spalte vergleichen Sie mit welcher? Können Sie auch ein Dataset mit mehreren Zeilen bereitstellen, damit Sie klarer sehen, was Sie tun möchten? – useR

Antwort

0

Wenn ich Ihre Absicht richtig verstanden habe, sollte dies so lange arbeiten, wie Sie Zeichenspalten und nicht die Faktoren (daher die stringsAsFactors = F)

library(dplyr) 
library(stringr) 

     datatimedf = data.frame(time_start_1 = c('Apr 2005', '2004', '2000', 'Mar 2011'), time_end_1 = c('Apr 2012', '2011', 'Oct 2001', '2012'), stringsAsFactors = F)       

     datatimedf %>% 
       mutate(time_start_1 = ifelse(str_detect(time_start_1, "[[:alpha:]]"), time_start_1, paste0("Jan ", time_start_1))) %>% 
       mutate(time_end_1 = ifelse(str_detect(time_end_1, "[[:alpha:]]"), time_end_1, paste0("Dec ", time_end_1))) 
Verwandte Themen