我有一个不平衡的面板数据。简化示例如下:
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
我想做的是在每个变量的所有frims中修剪每年的异常值。修剪的方法是将NA分配给那些值&gt; 99%和&lt; 1%的数据。例如,对于2000年,对于Var_1,将NA分配给所有&gt;的值。 99%或< 1%。理想情况下,修剪后的数据将如下所示:
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
真实数据庞大,数据结构不平衡。
答案 0 :(得分:0)
您可以尝试以下方法一次为每个变量标记异常值。
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