【发布时间】:2019-07-12 16:24:35
【问题描述】:
我有一个看起来像这样的大型数据集(大约 12,000 列)
> df
ID Group val1 val2 val3
1 01 a 3 3 3
2 02 a 4 4 4
3 03 b 6 6 7
4 04 c 10 10 19
5 05 b 2 2 2
6 06 b 4 4 4
7 07 c 8 8 8
8 08 c 12 12 12
遍历每一列并为每个组获取一个 IQR。
-
然后为每组的每一列计算一个 deltaIQR...
例如
B 的 delta IQR = (B 组的 IQR - A 组的 IQR)/A 组的 IQR
C 的 delta IQR = (C 组的 IQR - A 组的 IQR) / A 组的 IQR
最有效的方法是什么?
我尝试按 Group 解决方案进行 dplyr 汇总,但 df 太大。而且我还需要先计算分位数,等等。所以它变得更加笨拙......
之前使用 dplyr 解决方案会带来一些错误
df %>%
group_by(Group) %>%
summarise_at(vars(matches('val')), IQR) %>%
rename_at(-1, ~ paste0(., "_IQR")) %>%
mutate_at(vars(matches('val')), list(delta= ~ (. - .[1])/.[1]))
在我的实际数据集中
> temp
v6599_IQR v6599_IQR_delta v1554_IQR v1554_IQR_delta
1 0.00191803 0.000000e+00 0.001794153 0.000000e+00
2 0.62698976 3.258926e+02 1.722508234 9.590677e+02
3 0.00191803 7.235440e-15 0.001794153 4.641005e-14
4 0.00191803 -3.617720e-14 2.155928869 1.200642e+03
现在似乎有错误,因为当我计算 3 和 4 的 deltaIQR 时...计算已关闭,对于第一列,第 3 行和第 4 行的 delta IQR 应该为 0。
【问题讨论】:
-
你能分享
dput(head(yourdata,10)的输出吗? -
数据量很大,但我已经向您展示了 2 列的输出,对于 IQR 和 deltaIQR,第 1-4 行是单独的组
-
我向您展示的语法,仅共享 10 行,因此数据大小无关紧要。
-
你是指我的输入数据还是 dplyr 的输出(见编辑后的帖子)
-
您想知道为什么增量 IQR 是 7.235440e-15 和 -3.617720e-14 而不是 0.000000e+00?这是由于浮点运算导致的,在here: Why are these numbers not equal? 中有详细解释