【发布时间】:2020-09-03 20:56:03
【问题描述】:
df
a = c("aa", "bb", "cc", "bb", "bb", "cc","bb", "bb", "cc", "cc", "bb", "cc", "bb", "bb", "cc","bb", "bb", "cc", "cc", "bb","bb")
b = c("aa", "bb", "cc", "bb", "bb", "cc","bb", "bb", "cc", "cc", "bb", "cc", "bb", "bb", "cc","bb", "bb", "cc", "cc", "bb","bb")
c = c("aa", "aa", "aa", "bb", "bb", "cc","bb", "bb", "cc", "cc", "bb", "cc", "bb", "bb", "cc","bb", "bb", "cc", "cc", "bb","bb")
d = c(1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 1)
df = data.frame(a,b,c,d)
列名称:
cols <- c("a","b","c")
功能:
rare_label <- function(x){
freq = prop.table(table(unlist(x)))
make_rare = names(freq)[freq < 0.20]
lapply(x,
function(x) {
replace(x, x %in% make_rare, "Rare")
})}
希望用dplyr::mutate(across()) 评估a、b、c 中组合所有值的比例,然后将比例低于20% 的任何类别更改为“稀有”。
输出:
a b c
Rare Rare Rare
bb bb Rare
cc cc Rare
bb bb bb
bb bb bb
cc cc cc
bb bb bb
. . .
. . .
. . .
使用下面的代码会引发错误,我不确定为什么。
df %<>%
mutate(across(where(cols), ~rare_label(.)
错误:出现意外符号:“ mutate(across(where(cols), ~rare_label(.) 查看"
【问题讨论】:
-
您的第一行代码不起作用,其中一列较短
-
已修复,抱歉
标签: r