在R中过滤独立变量的每个值的数据

时间:2016-05-13 12:49:43

标签: r data-manipulation data-processing

我对R和数据处理一般都很陌生,所以如果我对术语的使用很差,请原谅我。

我有一些数据带有离散的,非唯一的自变量DeltaT和一个称为Score的依赖值。

我想保留DeltaT中每个值的前5个百分位数(删除所有LT 0.95百分位数)。

下图描绘了我想要完成的任务。

Example in Excel

我的印象是,如果没有循环,有办法做到这一点,但不知道我可能需要的功能的名称。

4 个答案:

答案 0 :(得分:1)

没有您的数据,我创建了自己的数据。这是一种方法,可以帮助您使用分位数函数获得第95百分位值并使用 List<String> list = new LinkedList<String>(); Set<String> set = new LinkedHashSet<String>(); list.add("B"); list.add("A"); list.add("A"); list.add("R"); list.add("C");list.add("A");list.add("C");list.add("R"); for (String string : list) { if (Collections.frequency(list, string) > 1) { set.add(string); } } for (String string : set) { list.remove(string); } System.out.println(list); 包的分组和过滤功能的解决方案:

dplyr

在这种情况下的输出将仅为这两个分数与第95百分位或以上匹配:

library(dplyr)
df <- data.frame(DeltaT = c(rep(1, 10), rep(2, 10)), Score = c(1:10, 1:10))
df %>% group_by(DeltaT) %>% filter(Score >= quantile(Score, probs = 0.95))

您可以更改符合您特定需求的代码。

答案 1 :(得分:1)

以下是使用quantile()ave(),比较和编制索引的基本R解决方案:

df <- data.frame(DeltaT=c(1L,1L,1L,2L,2L,3L,3L,3L,3L,4L,4L,4L),Score=1:12);
df[df$Score>=ave(df$Score,df$DeltaT,FUN=function(x) quantile(x,0.95)),];
##    DeltaT Score
## 3       1     3
## 5       2     5
## 9       3     9
## 12      4    12

您的示例数据并不理想,因为它不包括满足过滤条件的多个Score值的情况。我在假设您要保留满足条件的所有行的情况下编写了我的解决方案。这是一个更好的测试:

df <- data.frame(DeltaT=c(1L,1L,1L,2L,2L,3L,3L,3L,3L,4L,4L,4L,4L),Score=c(1:12,12));
df[df$Score>=ave(df$Score,df$DeltaT,FUN=function(x) quantile(x,0.95)),];
##    DeltaT Score
## 3       1     3
## 5       2     5
## 9       3     9
## 12      4    12
## 13      4    12

答案 2 :(得分:0)

试试这个:

Source: local data frame [2 x 2]
Groups: DeltaT [2]

  DeltaT Score
   <dbl> <int>
1      1    10
2      2    10

答案 3 :(得分:0)

dplyr 非常有帮助。 假设&#34; df2&#34;是你的data.frame

> library(dplyr)
> group_by(df2, DeltaT) %>% summarise(Score = round(quantile(Score, probs=0.95),0))
Source: local data frame [4 x 2]

  DeltaT   Score
   (dbl) (dbl)
1      1     3
2      2     5
3      3     9
4      4    12