反转某些数据框列的顺序

标签 r dataframe apply

我有一个data.frame,我想计算一个性能指标(例如分位数)。但是,data.frame 的某些列包含您认为是“负面”的统计信息 - 示例:

r=seq(0,1,0.25)
apply(state.x77,2,function(x) quantile(x,probs = r))
     Population  Income Illiteracy Life Exp Murder HS Grad  Frost      Area
0%        365.0 3098.00      0.500  67.9600  1.400   37.80   0.00   1049.00
25%      1079.5 3992.75      0.625  70.1175  4.350   48.05  66.25  36985.25
50%      2838.5 4519.00      0.950  70.6750  6.850   53.25 114.50  54277.00
75%      4968.5 4813.50      1.575  71.8925 10.675   59.15 139.75  81162.50
100%    21198.0 6315.00      2.800  73.6000 15.100   67.30 188.00 566432.00

收入和预期生命周期均为正值。然而,例如谋杀率是负数,越低越好。我想要的正是这个结果:

     Population  Income Illiteracy Life Exp Murder HS Grad  Frost      Area
0%        365.0 3098.00      2.800  67.9600 15.100   37.80 188.00   1049.00
25%      1079.5 3992.75      1.575  70.1175 10.675   48.05 139.75  36985.25
50%      2838.5 4519.00      0.950  70.6750  6.850   53.25 114.50  54277.00
75%      4968.5 4813.50      0.625  71.8925  4.350   59.15  66.25  81162.50
100%    21198.0 6315.00      0.500  73.6000  1.400   67.30   0.00 566432.00

我使用两个 sweep 函数和一个 apply 函数来实现这一点。那真是太丑了!有没有更优雅的方式?

数据集state.x77内置于R中。

最佳答案

您可以将每一列乘以向量my_weight中的相应权重。然后取结果的绝对值。并且不需要定义概率向量,因为四分位数已经是分位数的默认值。

my_weight <- c(1, 1, -1, 1, -1, 1, -1, 1)
res <- sapply(seq_along(as.data.frame(state.x77)), function(i)
  abs(quantile(state.x77[, i]* my_weight[i])))
colnames(res) <- colnames(state.x77)

res
#     Population  Income Illiteracy Life Exp Murder HS Grad  Frost      Area
#0%        365.0 3098.00      2.800  67.9600 15.100   37.80 188.00   1049.00
#25%      1079.5 3992.75      1.575  70.1175 10.675   48.05 139.75  36985.25
#50%      2838.5 4519.00      0.950  70.6750  6.850   53.25 114.50  54277.00
#75%      4968.5 4813.50      0.625  71.8925  4.350   59.15  66.25  81162.50
#100%    21198.0 6315.00      0.500  73.6000  1.400   67.30   0.00 566432.00

关于反转某些数据框列的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54378429/

相关文章:

javascript - R Shiny 对用户定义的 javascript 的解析不正确?

r - R语言计算

python - Pandas 中特定列的特定值的总和

python - 根据单元格值向 Pandas 数据框添加一列

python - Pandas df.apply 不修改 DataFrame

python - 避免嵌套 .apply()

r - 如何将旋转的 NetCDF 转换回正常的纬度/经度网格?

r - Windows10 中来自 R 的 Ubuntu 终端

python - 如何有效地将多个函数应用于数据框?

python - 使用 DataFrame 中的值从 pandas Dataframe 中的函数构建新列