2016-05-22 13 views
2

データフレームのデータを&&で区切られた1つの値に結合しようとしています(特に理由はありません)。誰かが私がこのコマンドで逃していることを説明することはできますか?既存の列にデータをマージする

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 

ボーナス質問:

#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 

GOAL:それは2段階のプロセスですが

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 

答えて

4

これは、あなたが望む出力を生成します。

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

あなたはmerge第二data.frameを指定していないので、あなたが取得している最初のエラーがあります。

+0

おかげで、私は前に集計コマンドを見てhadnt!完璧に働いた! – Rilcon42

+0

私は 'aggregate'が大好きで、data.tablesを使っていない限り、毎日使っています。 – lmo

1

plyr/dplyrベースのソリューション:

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) 
関連する問題