用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 创建
我需要对我的真实 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 创建