用R计算我的df中每列重复值百分比的递归方法

Recursive method for calculate percentual of repeated values for each column in my df with R

我需要对我的真实 df 使用 lapply/sapply 或其他递归方法来计算每个 column/variable.

中有多少重复值

这里我用一个小例子来重现我的案例:

library(dplyr)

df <- data.frame(
var1 = c(1,2,3,4,5,6,7,8,9,10 ),
var2 = c(1,1,2,3,4,5,6,7,9,10 ),
var3 = c(1,1,1,2,3,4,5,6,7,8 ),
var4 = c(2,2,1,1,2,1,1,2,1,2 ),
var5 = c(1,1,1,1,1,4,5,5,6,7 ),
var6 = c(4,4,4,5,5,5,5,5,5,5 )   
)

我的数据集中有 r nrow(df),现在我需要获取每列重复值的百分比。假设我真正的df有很多列,我需要递归地做。我尝试使用 lapply/sapply,但没有成功...

# create function that is used in lapply
perc_repeated <- function(variables){
  
  paste(round((sum(table(df$variables)-1) / nrow(df))*100,2),"%")
  
}

perce_repeated_values <- lapply(df, perc_repeated) 
perce_repeated_values

如果我的数据帧的列数增加到大约 700,如何对每一列使用一些递归函数并在数据帧中从最大到最小有序地获取结果,如何最佳地执行此操作? (例如,达到 0% 的变量具有 100% 的重复值),例如:

df_repeated

variable      perc_repeated_values
var6                    80%
var4                    80%
var5                    50%
var3                    20%
var2                    20%
var1                     0%

这可以通过 dplyr::summarize()

轻松完成
library(tidyverse)

df <- data.frame(
  var1 = c(1,2,3,4,5,6,7,8,9,10 ),
  var2 = c(1,1,2,3,4,5,6,7,9,10 ),
  var3 = c(1,1,1,2,3,4,5,6,7,8 ),
  var4 = c(2,2,1,1,2,1,1,2,1,2 ),
  var5 = c(1,1,1,1,1,4,5,5,6,7 ),
  var6 = c(4,4,4,5,5,5,5,5,5,5 )   
)

df %>% 
  summarise(across(everything(),
                   ~100 * (1 - n_distinct(.)/n()))) %>% 
  pivot_longer(everything(), 
               names_to = "var", 
               values_to = "percent_repeated") %>% 
  arrange(desc(percent_repeated))
#> # A tibble: 6 x 2
#>   var   percent_repeated
#>   <chr>            <dbl>
#> 1 var4                80
#> 2 var6                80
#> 3 var5                50
#> 4 var3                20
#> 5 var2                10
#> 6 var1                 0

reprex package (v2.0.1)

于 2022-01-09 创建