【问题标题】:Generic solution update to sort multiple columns and filter a cut.off通用解决方案更新以对多列进行排序并过滤截止
【发布时间】:2021-11-06 03:52:47
【问题描述】:

hy,这是@Sam Dickson 提出的解决方案的更新建议。 谁能帮助创建更接近 [预期输出] 的输出并使用 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               

预期输出:

【问题讨论】:

  • 到目前为止你有什么?
  • 对于 Q1,您所说的“在每一列中从大到小对列进行排序”是什么意思?你的意思是你想对列进行排序 - 哪一列是第一列,哪一列是第二列,等等?还是您的意思是要对行进行排序,使列保持相同的顺序,先 RC1,然后再进行 RC2,等等?
  • 您的图像似乎已对行进行了排序。你的代码已经有dplyr::arrange(-RC1)。这将根据RC1 值按降序对行进行排序。您的图像以 大部分 降序显示 RC1 值,但随后出现了奇怪的情况,例如行 X14RC1 值远高于其周围的值。也许您想按行的总和进行排序?还是别的什么?
  • 什么定义了输出中突出显示的单元格?是否突出了某个截止点之上的所有内容?还是突出显示前 10% 的值?还是别的什么?
  • 最后,你希望输出是什么?您是否在 RMarkdown 中为 HTML 制作表格?还是字?还是PDF?还是图片?

标签: r sorting filter dplyr output


【解决方案1】:
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 创建

【讨论】:

  • OP 的问题还不清楚,但这并不接近他们想要的输出。过滤整行似乎与“隐藏值”非常不同。我强烈建议在发布正确概率很小的答案之前,请 OP 澄清他们想要什么。
  • @GregorThomas,我需要 r 的输出与示例表尽可能相似。要考虑的问题在问题中提出。我正在澄清可能的疑问。感谢您为使问题更清楚而做出的贡献。给出的答案没有正确回答问题。
  • @danlooo,给出的答案没有正确回答问题。看到在RC1行,例如RC2之间的值没有按照示例表中的正确顺序更正。
【解决方案2】:

现在问题已经解决了,我认为这是你想要的:

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

【讨论】:

    猜你喜欢
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2022-01-18
    相关资源
    最近更新 更多