zoukankan      html  css  js  c++  java
  • R&SQL合并记录并去重

    ====================================================================================

    data:

    have <- data.frame(ID=paste0("id", c(101, 102, 102, 103, 103, 104, 105, 105)),
    info1=c("one", "twoA", "twoB", "threeA", "threeB", "four", "five", "five"),
    stringsAsFactors=FALSE)
    want <- data.frame(ID=paste0("id", c(101:105)),
    info1=c("one", "twoA; twoB", "threeA; threeB", "four", "five"),
    stringsAsFactors=FALSE)

    ====================================================================================

     MySQL

    SELECT
        user_id,
        COUNT(id) AS freq,
        GROUP_CONCAT(DISTINCT ip SEPARATOR ",") AS ips
    FROM
        log_table
    GROUP BY
        user_id
    ORDER BY
        freq ASC;

    ====================================================================================

     R&SQL

    library(sqldf)


    sqldf("
    SELECT ID,
    GROUP_CONCAT(distinct info1) as info1
    FROM have
    GROUP BY ID")

    注:此种情况没能实现更改间隔符,默认为逗号。

    ====================================================================================

     R

    --------------------------------------------------------------------------------------------------------------------------------------

    require(dplyr)

    METHOD1:  have %>%    group_by(ID) %>%    summarise_each(funs(toString(sort(unique(info1)))))

    METHOD2:  have %>%    group_by(ID) %>%    summarise(name = toString(sort(unique(info1))))

    --------------------------------------------------------------------------------------------------------------------------------------

    require(data.table)

    METHOD1:  setDT(have)[, .(info1 = toString(sort(unique(info1)))), by = ID]
    METHOD2:  setDT(have)[ , .(info1 = paste(unique(info1), collapse = ",")),by = ID]

    注:paste函数作为其他函数的参数时,不能。例如

    aggregate(have[,2], by=list(have$ID), paste(unique(info1)), collapse=";")   × 

    aggregate(have[,2], by=list(have$ID), paste, collapse=";")  

    setDT(have)[, lapply(.SD, paste(unique(info1)), collapse = "; "), by = ID]  ×

    setDT(have)[, lapply(.SD, paste, collapse = "; "), by = ID]  √

    --------------------------------------------------------------------------------------------------------------------------------------

    aggregate(data=have,info1~ID,FUN = function(t) sort(unique(t)))

  • 相关阅读:
    android 6.0 新特性
    接口_ _接口回调机制
    bug_ _
    volley_缓存介绍
    bug__android studio 出现布局文件不提示,且点击代码不能跟踪代码
    文章--笔记本蓝牙可以搜索到手机,但是怎么连接不了?
    Dialog_ _dialog系统样式讲解 及 透明背景
    动画_ _ Android应用开发之所有动画使用详解
    view坐标_ _ Android应用坐标系统全面详解
    html__脚本之家
  • 原文地址:https://www.cnblogs.com/Emily07/p/6509362.html
Copyright © 2011-2022 走看看