【问题标题】:How do I trim data over 99% in unbalanced panel data in R?如何在 R 中的不平衡面板数据中修剪超过 99% 的数据?
【发布时间】:2016-11-28 16:39:05
【问题描述】:

我有一个不平衡的面板数据。简化示例如下:

Firm Year  V1  V2 V3
AAA  2001  0   8   2    
AAA  2002  10  4   2    
BBB  1999  0   8   8    
BBB  2000  7   0   6    
BBB  2001  10  100 1    
BBB  2002  1   5   8    
CCC  2001  2   8   0    
CCC  2002 -98  3  10    

我想做的是在每个变量的所有变量中修剪每年的异常值。修剪的方法是将 NA 分配给那些值 > 99% 和 99% 或

Firm Year  V1  V2 V3
AAA  2001  0   8   2    
AAA  2002  10  4   2    
BBB  1999  0   8   8    
BBB  2000  7   0   6    
BBB  2001  10  NA  1    
BBB  2002  1   5   8    
CCC  2001  2   8   0    
CCC  2002  NA  3   10   

真实数据海量,数据结构不平衡。

【问题讨论】:

  • 您的预期输出没有意义,values > 99% and < 1% of the data 是什么意思?那为什么每一列的maxmin不是NA呢?
  • 对不起,我没有说清楚。让我澄清一下,例如,在 2002 年,我们有 Var_1、(10,1,-98,...) 等数据的子集。将此子集视为正态分布,找到其中的 99% 和 1%正态分布。通过分配 NA 修剪掉高于 99% 和低于 1% 的值。假设这个数据子集的平均值和标准差是 7 和 22。所以 -98 低于 1%,即 -44.18。这有意义吗?
  • 那么下面的答案应该可以工作。

标签: r panel data-cleaning


【解决方案1】:

您可以尝试以下方法一次标记每个变量每年的异常值。

data.frame(lapply(df[3:5],                                         # variable indices 3:5
           function(y) ave(y, df$Year, FUN=function(x) 
                             ifelse(x < quantile(x, .01) | x > quantile(x, .99), NA, x)))) 

#   V1 V2 V3
# 1 NA  8 NA
# 2 NA  4 NA
# 3  0  8  8
# 4  7  0  6
# 5 NA NA  1
# 6  1 NA  8
# 7  2  8 NA
# 8 NA NA NA

【讨论】:

  • 您好,有没有办法保留“公司”和“年份”列?谢谢
猜你喜欢
  • 2020-06-07
  • 1970-01-01
  • 2023-03-03
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 2023-03-05
相关资源
最近更新 更多