我有一个 100 行 20 列的数据框。第 1 列包含可分组的 ID。第 2 至 20 列包含整数值。目的是考虑第 2 列至第 20 列中的所有值,找到第 1 列中每个唯一 ID 的 75 个百分位值。
我尝试了什么?
我使用了以下链接中的代码,使用aggregate()函数。
aggregate(GO~GeneID,data=df,FUN = function(x) paste0(x,collapse = '; '))
但是,您可以使用此代码为第 1 列中的所有唯一 ID 一次创建一列的值列表。因此,导出时值列表的第 80 个百分位数只是该列中值的第 80 个百分位数。我想要的是第 1 列中每个唯一 ID 的所有列中所有值的 80%。
使用
data.table
进行.SD
分组操作,让操作变得简单。
library(data.table)
setDT(df)[,.(p75 = quantile(unlist(.SD), 0.75)), keyby = id]
#> id p75
#> 1: 1 797.00
#> 2: 2 786.00
#> 3: 3 753.75
#> 4: 4 724.50
#> 5: 5 793.75
#> 6: 6 781.75
#> 7: 7 808.00
#> 8: 8 788.50
#> 9: 9 761.00
#> 10: 10 784.00
数据:
set.seed(1935200967)
df <- cbind(
data.frame(id = sample(10, 100, 1)),
matrix(sample(1e3, 1900, 1), 100)
)