【问题标题】:merging data into existing column将数据合并到现有列中
【发布时间】:2016-05-22 19:21:43
【问题描述】:

我正在尝试使用合并将数据帧中的数据组合成一个由&& 分隔的值(无特殊原因)。有人可以解释我在这个命令中缺少什么吗?

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

目标:

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

【问题讨论】:

    标签: r dataframe merge


    【解决方案1】:

    这会产生您想要的输出,尽管它是一个两步过程。

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

    【讨论】:

    • 谢谢,我之前没见过聚合命令!完美运行!
    • 我喜欢 aggregate 并每天使用它,除非我正在使用 data.tables。
    【解决方案2】:

    基于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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      • 2018-11-19
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      相关资源
      最近更新 更多