首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从R中的列表中筛选唯一值

如何从R中的列表中筛选唯一值
EN

Stack Overflow用户
提问于 2019-06-04 02:51:04
回答 2查看 634关注 0票数 1

我想要提取列表中特定等级的放电(Disch)值。该列表由每个月的日期、月份、Disch和Rank组成。每个月的行数都是不均匀的。如果我将列表中每个月的流量值过滤为Rank = 1,那么我需要做什么?另外,在原始数据集中,我有重复的等级及其对应的流量值,我如何为给定的等级过滤每个月的单个流量值?

代码语言:javascript
复制
S <- split(Sampledata3, Sampledata3$Months) #Split the original data into different months. 
This is how my list looks like: 
> S
$`1`
         Date Months Disch Rank
4  1943-01-01      1   255    1
5  1945-01-14      1   450    2
10 1962-01-18      1  1204    4
12 1972-01-15      1   635    3
16 1989-01-20      1  1204    4

$`3`
         Date Months Disch Rank
6  1945-03-14      3   215    1
17 1992-03-29      3   450    2

$`4`
         Date Months Disch Rank
8  1960-04-23      4   120    1
14 1981-04-11      4   154    2

$`5`
        Date Months Disch Rank
7 1954-05-04      5   360    2
9 1960-05-09      5   145    1

$`6`
         Date Months Disch Rank
3  1967-06-16      6   400    2
15 1986-06-20      6   154    1

$`8`
         Date Months Disch Rank
13 1977-08-15      8  1456    1

$`10`
        Date Months Disch Rank
1 1938-10-01     10  1000    1
2 1954-10-27     10  1200    2

$`12`
         Date Months Disch Rank
11 1968-12-19     12   752    1

Sample data:
> Date<- as.Date(c('1938-10-01','1954-10-27', '1967-06-16','1943-01-01','1945-01-14','1945-03-14','1954-05-04','1960-04-23','1960-05-09','1962-01-18','1968-12-19','1972-01-15','1977-08-15','1981-04-11','1986-06-20','1989-01-20','1992-03-29'))
> Months<- c('Oct','Oct','Jun','Jan','Jan','Mar','May','Apr','May','Jan','Dec','Jan','Aug','Apr','Jun','Jan','Mar')
> Dis<-c('1000','1200','400','255','450','215','360','120','145','1204','752','635','1456','154','154','1204','450')
> Sampledata<-data.frame("Date"=Date,"Months"=Months,"Disch"=Dis)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-04 03:26:48

list的一个选项是(如果OP已经有一个现有的list)

代码语言:javascript
复制
library(tidyverse)
map(S, ~ .x %>%
           filter(Rank == 1))

如果存在重复的'Rank‘,则使用以下命令删除重复项

代码语言:javascript
复制
map(S, ~ .x %>%
              filter(Rank == 1, !duplicated(Rank))

或者在which中使用slice

代码语言:javascript
复制
map(S, ~ .x %>%
             slice(which(Rank == 1)[1])
票数 0
EN

Stack Overflow用户

发布于 2019-06-04 03:30:28

或者使用base R tapplyaggregate,这两种方法都可以将函数应用于数据组,并为每组返回答案,但默认格式不同

代码语言:javascript
复制
#also recommend that you set stringsAsFactors=FALSE when you initialize data.frame as sample dataset
Sampledata <- data.frame(Date=Date,Months=Months,Disch=Dis, stringsAsFactors = FALSE)
Sampledata$Disch <- as.numeric(Sampledata$Disch) #convert to numeric class
tapply(X=Sampledata$Disch, INDEX=Sampledata$Months, FUN=max)
#Apr  Aug  Dec  Jan  Jun  Mar  May  Oct 
#154 1456  752 1204  400  450  360 1200

aggregate(Disch ~ Months, data = Sampledata, FUN=max)
#   Months Disch
#1    Apr   154
#2    Aug  1456
#3    Dec   752
#4    Jan  1204
#5    Jun   400
#6    Mar   450
#7    May   360
#8    Oct  1200
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56433012

复制
相关文章

相似问题

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