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)
Col 이름 :
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")
})}
a, b, c에 결합 된dplyr::mutate(across())
모든 값의 비율 로 평가 한 다음 비율이 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 (.) View"
한 가지 옵션은 다음과 같습니다.
df %>%
mutate(across(all_of(cols),
~ replace(., . %in% names(which(prop.table(table(.)) < 0.20)), "rare")))
a b c d
1 rare rare rare 1
2 bb bb rare 1
3 cc cc rare 2
4 bb bb bb 2
5 bb bb bb 3
6 cc cc cc 3
7 bb bb bb 1
8 bb bb bb 1
9 cc cc cc 1
10 cc cc cc 1
기존 기능을 적용하려는 경우 :
fun <- function(x) replace(x, x %in% names(which(prop.table(table(x)) < 0.20)), "rare")
df %>%
mutate(across(all_of(cols), fun))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다