通用解决方案更新以对多列进行排序并过滤 cut.off

Generic solution update to sort multiple columns and filter a cut.off

hy,这里是 提出的解决方案的更新建议。 谁可以为创建更接近 [Expected output] 的输出并使用 dplyr 函数概括解决方案做出贡献。

data.frame(
  RC1=c(0.902,0.9,0.899,0.825,0.802,0.745,0.744,0.74,0.382,0.356,0.309,0.295,0.194,0.162,0.162,0.156,0.153,0.147,0.144,0.142,0.123,0.113,0.098,0.062),
  RC2=c(0.206,0.282,0.133,0.057,0.091,0.243,-0.068,0.105,0.143,0.173,0.329,0.683,0.253,0.896,-0.155,-0.126,0.06,-0.158,0.952,0.932,-0.077,-0.062,0.322,-0.065),
  RC3=c(0.153,-0.029,0.093,0.138,0.289,0.071,0.413,-0.011,-0.069,0.181,0.123,-0.035,0.807,0.104,-0.044,0.504,0.15,-0.004,-0.013,0.106,0.785,-0.053,0.751,0.858),
  RC4=c(0.078,0.05,0.219,0.216,0.218,0.114,0.122,0.249,0.726,0.108,0.725,-0.089,0.249,0.146,0.622,-0.189,0.099,0.406,0.05,0.026,-0.018,-0.095,0.007,-0.118),
  RC5=c(0.217,0.021,-0.058,0.166,0.352,0.09,0.26,-0.354,0.065,-0.014,0.064,0.359,0.134,-0.114,0.212,0.178,0.878,0.71,-0.019,-0.021,0.015,-0.055,0.165,-0.074),
  RC6=c(0.027,-0.007,0.087,0.104,0.045,0.319,0.296,0.205,0.088,0.816,0.229,0.302,0.163,0.059,-0.256,0.604,-0.07,0.394,-0.02,-0.041,0.071,-0.008,0.219,-0.068),
  RC7=c(-0.015,-0.15,0.073,0.126,0.06,0.347,0.082,-0.093,-0.155,0.093,-0.045,-0.175,-0.021,0.004,0.052,-0.184,-0.054,-0.008,0.012,-0.004,0.094,0.951,-0.001,-0.118))->df 
row.names(df)<- c("X5","X12","X13","X2","X6","X4","X3","X11","X15","X10","X16","X8","X20","X19","X17","X21","X9","X7","X22","X24","X1","X14","X23","X18")

  ord1 <- apply(as.matrix(df),1,function(x) min(which(abs(x)>=0.4),ncol(df)))
  ord2 <- df[cbind(1:nrow(df),ord1)]
  df[order(ord1,-abs(ord2)),] 
  df1<-df[ , ]> 0.4
  row.names(df1)<- c("X5","X12","X13","X2","X6","X4","X3","X11","X15","X10","X16","X8","X20","X19","X17","X21","X9","X7","X22","X24","X1","X14","X23","X18")
  df1
  
  df[df[,]< 0.4] <- ""
  df

Output:
      RC1   RC2   RC3   RC4   RC5   RC6   RC7
X5  0.902                                    
X12   0.9                                    
X13 0.899                                    
X2  0.825                                    
X6  0.802                                    
X4  0.745                                    
X3  0.744       0.413                        
X11  0.74                                    
X15                   0.726                  
X10                               0.816      
X16                   0.725                  
X8        0.683                              
X20             0.807                        
X19       0.896                              
X17                   0.622                  
X21             0.504             0.604      
X9                          0.878            
X7                    0.406  0.71            
X22       0.952                              
X24       0.932                              
X1              0.785                        
X14                                     0.951
X23             0.751                        
X18             0.858               

预期输出:

library(tidyverse)

data <-
  data.frame(
  id=c("X5","X12","X13","X2","X6", "X4","X3","X11","X15","X10","X16","X8","X20","X19","X17","X21","X9","X7","X22","X24","X1","X14","X23","X18"),
  RC1=c(0.902,0.9,0.899,0.825,0.802,0.745,0.744,0.74,0.382,0.356,0.309,0.295,0.194,0.162,0.162,0.156,0.153,0.147,0.144,0.142,0.123,0.113,0.098,0.062),
  RC2=c(0.206,0.282,0.133,0.057,0.091,0.243,-0.068,0.105,0.143,0.173,0.329,0.683,0.253,0.896,-0.155,-0.126,0.06,-0.158,0.952,0.932,-0.077,-0.062,0.322,-0.065),
  RC3=c(0.153,-0.029,0.093,0.138,0.289,0.071,0.413,-0.011,-0.069,0.181,0.123,-0.035,0.807,0.104,-0.044,0.504,0.15,-0.004,-0.013,0.106,0.785,-0.053,0.751,0.858),
  RC4=c(0.078,0.05,0.219,0.216,0.218,0.114,0.122,0.249,0.726,0.108,0.725,-0.089,0.249,0.146,0.622,-0.189,0.099,0.406,0.05,0.026,-0.018,-0.095,0.007,-0.118),
  RC5=c(0.217,0.021,-0.058,0.166,0.352,0.09,0.26,-0.354,0.065,-0.014,0.064,0.359,0.134,-0.114,0.212,0.178,0.878,0.71,-0.019,-0.021,0.015,-0.055,0.165,-0.074),
  RC6=c(0.027,-0.007,0.087,0.104,0.045,0.319,0.296,0.205,0.088,0.816,0.229,0.302,0.163,0.059,-0.256,0.604,-0.07,0.394,-0.02,-0.041,0.071,-0.008,0.219,-0.068),
  RC7=c(-0.015,-0.15,0.073,0.126,0.06,0.347,0.082,-0.093,-0.155,0.093,-0.045,-0.175,-0.021,0.004,0.052,-0.184,-0.054,-0.008,0.012,-0.004,0.094,0.951,-0.001,-0.118)
)

# Question 1: How to sort the columns, from largest to smallest, in each column, as in the image?
data %>% arrange(-RC1)
#>     id   RC1    RC2    RC3    RC4    RC5    RC6    RC7
#> 1   X5 0.902  0.206  0.153  0.078  0.217  0.027 -0.015
#> 2  X12 0.900  0.282 -0.029  0.050  0.021 -0.007 -0.150
#> 3  X13 0.899  0.133  0.093  0.219 -0.058  0.087  0.073
#> 4   X2 0.825  0.057  0.138  0.216  0.166  0.104  0.126
#> 5   X6 0.802  0.091  0.289  0.218  0.352  0.045  0.060
#> 6   X4 0.745  0.243  0.071  0.114  0.090  0.319  0.347
#> 7   X3 0.744 -0.068  0.413  0.122  0.260  0.296  0.082
#> 8  X11 0.740  0.105 -0.011  0.249 -0.354  0.205 -0.093
#> 9  X15 0.382  0.143 -0.069  0.726  0.065  0.088 -0.155
#> 10 X10 0.356  0.173  0.181  0.108 -0.014  0.816  0.093
#> 11 X16 0.309  0.329  0.123  0.725  0.064  0.229 -0.045
#> 12  X8 0.295  0.683 -0.035 -0.089  0.359  0.302 -0.175
#> 13 X20 0.194  0.253  0.807  0.249  0.134  0.163 -0.021
#> 14 X19 0.162  0.896  0.104  0.146 -0.114  0.059  0.004
#> 15 X17 0.162 -0.155 -0.044  0.622  0.212 -0.256  0.052
#> 16 X21 0.156 -0.126  0.504 -0.189  0.178  0.604 -0.184
#> 17  X9 0.153  0.060  0.150  0.099  0.878 -0.070 -0.054
#> 18  X7 0.147 -0.158 -0.004  0.406  0.710  0.394 -0.008
#> 19 X22 0.144  0.952 -0.013  0.050 -0.019 -0.020  0.012
#> 20 X24 0.142  0.932  0.106  0.026 -0.021 -0.041 -0.004
#> 21  X1 0.123 -0.077  0.785 -0.018  0.015  0.071  0.094
#> 22 X14 0.113 -0.062 -0.053 -0.095 -0.055 -0.008  0.951
#> 23 X23 0.098  0.322  0.751  0.007  0.165  0.219 -0.001
#> 24 X18 0.062 -0.065  0.858 -0.118 -0.074 -0.068 -0.118

# Question 2: How to hide the values ​in each column when the value is =< 0.04?
data %>% filter(RC1 > 0.04)
#>     id   RC1    RC2    RC3    RC4    RC5    RC6    RC7
#> 1   X5 0.902  0.206  0.153  0.078  0.217  0.027 -0.015
#> 2  X12 0.900  0.282 -0.029  0.050  0.021 -0.007 -0.150
#> 3  X13 0.899  0.133  0.093  0.219 -0.058  0.087  0.073
#> 4   X2 0.825  0.057  0.138  0.216  0.166  0.104  0.126
#> 5   X6 0.802  0.091  0.289  0.218  0.352  0.045  0.060
#> 6   X4 0.745  0.243  0.071  0.114  0.090  0.319  0.347
#> 7   X3 0.744 -0.068  0.413  0.122  0.260  0.296  0.082
#> 8  X11 0.740  0.105 -0.011  0.249 -0.354  0.205 -0.093
#> 9  X15 0.382  0.143 -0.069  0.726  0.065  0.088 -0.155
#> 10 X10 0.356  0.173  0.181  0.108 -0.014  0.816  0.093
#> 11 X16 0.309  0.329  0.123  0.725  0.064  0.229 -0.045
#> 12  X8 0.295  0.683 -0.035 -0.089  0.359  0.302 -0.175
#> 13 X20 0.194  0.253  0.807  0.249  0.134  0.163 -0.021
#> 14 X19 0.162  0.896  0.104  0.146 -0.114  0.059  0.004
#> 15 X17 0.162 -0.155 -0.044  0.622  0.212 -0.256  0.052
#> 16 X21 0.156 -0.126  0.504 -0.189  0.178  0.604 -0.184
#> 17  X9 0.153  0.060  0.150  0.099  0.878 -0.070 -0.054
#> 18  X7 0.147 -0.158 -0.004  0.406  0.710  0.394 -0.008
#> 19 X22 0.144  0.952 -0.013  0.050 -0.019 -0.020  0.012
#> 20 X24 0.142  0.932  0.106  0.026 -0.021 -0.041 -0.004
#> 21  X1 0.123 -0.077  0.785 -0.018  0.015  0.071  0.094
#> 22 X14 0.113 -0.062 -0.053 -0.095 -0.055 -0.008  0.951
#> 23 X23 0.098  0.322  0.751  0.007  0.165  0.219 -0.001
#> 24 X18 0.062 -0.065  0.858 -0.118 -0.074 -0.068 -0.118


# Question 3:That the solution is, if possible, generic for n columns
data %>% filter_at(vars(starts_with("RC")), ~ .x > 0.04)
#>   id   RC1   RC2   RC3   RC4   RC5   RC6   RC7
#> 1 X2 0.825 0.057 0.138 0.216 0.166 0.104 0.126
#> 2 X6 0.802 0.091 0.289 0.218 0.352 0.045 0.060
#> 3 X4 0.745 0.243 0.071 0.114 0.090 0.319 0.347

# Question 4: If possible, how visually can the doR output be presented in table format (expected output)?.
# Output is already a table, you can use kable package for HTML table rendering

reprex package (v2.0.1)

于 2021-09-09 创建

现在问题解决了,我想这就是你想要的:

library(dplyr)

df %>%
  mutate(across(everything(),
        ~ ifelse(. < 0.4, "", format(., digits = 3)))) %>%
  arrange(across(everything(), desc))
#      RC1    RC2    RC3    RC4    RC5    RC6    RC7
# 1  0.902                                          
# 2  0.900                                          
# 3  0.899                                          
# 4  0.825                                          
# 5  0.802                                          
# 6  0.745                                          
# 7  0.744         0.413                            
# 8  0.740                                          
# 9         0.952                                   
# 10        0.932                                   
# 11        0.896                                   
# 12        0.683                                   
# 13               0.858                            
# 14               0.807                            
# 15               0.785                            
# 16               0.751                            
# 17               0.504                0.604       
# 18                      0.726                     
# 19                      0.725                     
# 20                      0.622                     
# 21                      0.406  0.710              
# 22                             0.878              
# 23                                    0.816       
# 24                                           0.951