首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个dataframe连接到另一个dataframe上,该dataframe与分类变量总结的内容相同

将一个dataframe连接到另一个dataframe上,该dataframe与分类变量总结的内容相同
EN

Stack Overflow用户
提问于 2018-08-12 08:27:15
回答 2查看 33关注 0票数 1

使用库(Tidyverse)。

我有一个非常大的数据帧,结构是这样的(数千个观测值按站点分为31个级别):

代码语言:javascript
复制
 A tibble: 31 x 5
   STATION     NAME       LONGITUDE LATITUDE ELEVATION
   <fct>       <list>     <list>    <list>   <list>   
 1 US1ORLA0001 <chr [31]> <NULL>    <NULL>   <NULL>   
 2 US1ORLA0003 <chr [31]> <NULL>    <NULL>   <NULL>   
 3 US1ORLA0004 <chr [31]> <NULL>    <NULL>   <NULL>   
 4 US1ORLA0005 <chr [31]> <NULL>    <NULL>   <NULL>   
 5 US1ORLA0031 <chr [31]> <NULL>    <NULL>   <NULL>   
 6 US1ORLA0040 <chr [31]> <NULL>    <NULL>   <NULL>   
 7 US1ORLA0050 <chr [31]> <NULL>    <NULL>   <NULL>   
 8 US1ORLA0076 <chr [31]> <NULL>    <NULL>   <NULL>   
 9 US1ORLA0088 <chr [31]> <NULL>    <NULL>   <NULL>   
10 US1ORLA0089 <chr [31]> <NULL>    <NULL>   <NULL>   
 ... with 21 more rows

我还有这个数据集的汇总版本,它是我用以下代码创建的:

代码语言:javascript
复制
summary <- raw %>%
  group_by(STATION) %>%
  summarise(count = n()) %>% 
  arrange(desc(count))

结果是:

代码语言:javascript
复制
# A tibble: 31 x 2
   STATION     count
   <fct>       <int>
 1 USC00353995 17136
 2 USC00351324 14110
 3 USR0000OHIG 11610
 4 USR0000OVIL 11500
 5 USR0000OGOO 10855
 6 USC00352972 10068
 7 USR0000ODUN  8286
 8 USC00355204  5880
 9 USR0000OCLY  4514
10 USC00352973  4295
# ... with 21 more rows

我的目标是以left_join的方式将原始数据tibble连接到摘要数据tibble,这将导致每个级别(站点因子)有一个数据帧,一个COUNT列,以及来自原始数据的其余列(name,long,lat,ele)。如下所示:

代码语言:javascript
复制
# A tibble: 31 x 6
# Groups:   STATION [31]
   STATION     count NAME                       LONGITUDE LATITUDE ELEVATION
   <fct>       <int> <fct>                          <dbl>    <dbl>     <dbl>
 1 USC00353995 17136 HONEYMAN STATE PARK, OR US     -124.     43.9      35.1
# ... with 30 more rows

我已经尝试使用以下命令来完成此操作:

代码语言:javascript
复制
desired_output <- left_join(summary, raw, by = c("STATION" = "STATION"))

我希望它保留x中的行(每个级别1行)和y中的列。问题是,它也保留了y形式的所有行,所以我以以下形式结束:

代码语言:javascript
复制
# A tibble: 135,905 x 6
# Groups:   STATION [31]
   STATION     count NAME                       LONGITUDE LATITUDE ELEVATION
   <fct>       <int> <fct>                          <dbl>    <dbl>     <dbl>
 1 USC00353995 17136 HONEYMAN STATE PARK, OR US     -124.     43.9      35.1
 2 USC00353995 17136 HONEYMAN STATE PARK, OR US     -124.     43.9      35.1
 3 USC00353995 17136 HONEYMAN STATE PARK, OR US     -124.     43.9      35.1
 4 USC00353995 17136 HONEYMAN STATE PARK, OR US     -124.     43.9      35.1
 5 USC00353995 17136 HONEYMAN STATE PARK, OR US     -124.     43.9      35.1
 6 USC00353995 17136 HONEYMAN STATE PARK, OR US     -124.     43.9      35.1
 7 USC00353995 17136 HONEYMAN STATE PARK, OR US     -124.     43.9      35.1
 8 USC00353995 17136 HONEYMAN STATE PARK, OR US     -124.     43.9      35.1
 9 USC00353995 17136 HONEYMAN STATE PARK, OR US     -124.     43.9      35.1
10 USC00353995 17136 HONEYMAN STATE PARK, OR US     -124.     43.9      35.1
# ... with 135,895 more rows

这对我的目的没什么用。

实现这一目标和类似结果的最佳方法是什么?我愿意以完全不同的方式来做这件事(而不是使用汇总等)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-12 10:10:51

我们在原始数据集上创建一个'count‘列,然后对这些列应用distinct,以便每个组只获得一个观察值

代码语言:javascript
复制
library(dplyr)
raw %>% 
     group_by(STATION) %>% 
     mutate(count = n()) %>% 
     ungroup %>% 
     distinct(STATION, .keep_all = TRUE)

注意:在输入数据集中,一些列显示为list。根据显示的预期输出情况尚不清楚

票数 0
EN

Stack Overflow用户

发布于 2018-08-12 08:41:17

data.table方式:

代码语言:javascript
复制
library(data.table)
setDT(raw)

raw[ , .(count=.N, lat=unique(LATITUDE), lng=unique(LONGITUDE)), by=STATION]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51804789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档