2016-05-22 17 views
2

Ich versuche, Daten aus einem Dataframe in einen Wert zu trennen, der durch && mit Merge (ohne besonderen Grund) getrennt wird. Kann jemand erklären, was ich mit diesem Befehl vermisse?Daten in vorhandene Spalte zusammenführen

news<-data.frame(c("2016-05-20","2016-05-19","2016-05-19"),c("x","y","z")) 
data<-data.frame(c("2016-05-20","2016-05-21","2016-05-22"),c(1,2,3)) 

#bind news with the same date into value seperated by && 
    news<-merge(news,by.x=news[,1]) 
    #Error in as.data.frame(y) : argument "y" is missing, with no default 

Bonus Frage:

#merge news with data based on matching date 
    merge(news,data,by.x=news[,1],by.y=data[,1]) 
    #Error in fix.by(by.x, x) : 'by' must specify uniquely valid columns 

ZIEL:

1         2016-05-20   1  x 
2         2016-05-19   NA  y && z 
3         2016-05-21   2  NA 
4         2016-05-22   3  NA 

Antwort

4

Dies erzeugt die Ausgabe, die Sie wollen, obwohl es ein zweistufiger Prozess ist.

# get data with some nice names 
news <- data.frame(date=c("2016-05-20","2016-05-19","2016-05-19"), lets=c("x","y","z")) 
data <- data.frame(date=c("2016-05-20","2016-05-21","2016-05-22"), nums=c(1,2,3)) 

# combine observations with the same date 
newsC <- aggregate(lets~date, data=news, FUN=paste, collapse="&&") 
merge(data, newsC, by="date", all=TRUE) 

Der erste Fehler, den Sie bekommen, weil Sie nicht ein zweites data.frame in merge angeben.

+0

Danke, ich hadnt vor dem Aggregat Befehl gesehen! Arbeitete perfekt! – Rilcon42

+0

Ich liebe 'Aggregat' und benutze es täglich, es sei denn, ich arbeite mit data.tables. – lmo

1

A plyr/dplyr -basierte Lösung:

library(dplyr) 

news <- data.frame(date=c("2016-05-20","2016-05-19","2016-05-19"), 
        letters=c("x","y","z"), stringsAsFactors = FALSE) 
data <- data.frame(date=c("2016-05-20","2016-05-21","2016-05-22"), 
        numbers=c(1,2,3), stringsAsFactors = FALSE) 

df <- plyr::rbind.fill(news,data) 

df.combined <- df %>% group_by(date) %>% summarize_each(funs(paste(na.omit(.), collapse=" && ")), letters:numbers) 
Verwandte Themen