如何基于列聚合数据

时间:2016-09-18 00:58:22

标签: r postgresql dplyr

我是R的新手,我正在尝试弄清楚如何将数据组合成一种独特的格式,然后将这些数据输入到postgres数据库中。以下是提供格式示例的代码:

std::mutex

以下是当前数据集:

df <- data.frame("1"=c("us","fr","us","fr","de", "de"), "2"=c(35, 20, 35, 20, 22.25, 125), "3"=c(105, -67.56, 105, -67.56, 138, 12), "4"=c(100, 200, 80, 160, 50, 18))

colnames(df) <-  c(
    "countryAbr",
    "latitude",
    "longitude",
    "countOfResidents"
    )

我想根据一个国家/地区的总发生次数组合数据,同时考虑唯一和重复的纬度和经度坐标。我也想把居民的总和结合起来。这是我期望的最终结果:

  countryAbr latitude longitude countOfResidents
1         us    35.00    105.00              100
2         fr    20.00    -67.56              200
3         us    35.00    105.00               80
4         fr    20.00    -67.56              160
5         de    22.25    138.00               50
6         de    125      12                   18

我使用count函数来获取国家的总出现次数(我认为??),但不确定如何组合所有内容以及要使用的函数。

  countryAbr TotalCountryOccurances TotalResidentCount
1         us                      2                180
2         fr                      2                360
3         de                      2                 68

当我确实拥有最终数据集时,我想将其放入postgres表中以便在前端查询和使用。我知道如何做后者,不知道如何将R数据导入Postgres表。

**为了清晰起见,编辑重复和唯一的纬度和长**

2 个答案:

答案 0 :(得分:2)

如果您想计算行数并计算每个唯一countryAbr的居民人数,则可以在{{1}分组后使用dplyrsummarise这些计数}:

countryAbr

由于我们按library(dplyr) result <- df %>% group_by(countryAbr) %>% summarise(TotalCountryOccurances=n(), TotalResidentCount=sum(countOfResidents)) 中的每个唯一值进行分组,因此函数countryAbr返回组的行数,函数n()计算列{{1}的总和对于小组来说。在这种情况下,对于sum中的每个唯一值,行的计数和总和都超过countOfResidentslatitude的所有值。我假设你的意思是:

  

考虑唯一且重复的纬度和经度坐标。

根据您提供的数据:

longitude

答案 1 :(得分:1)

您可以使用data.table包

library(data.table)
setDT(df)
df[, .(TotalCountryOccurances = .N, TotalResidentCount = sum(countOfResidents)), 
   by = countryAbr]