오류 :`mutate ()`입력`코딩`에 문제가 있습니다. x "character"클래스의 객체에 적용된 'select'에 해당하는 방법이 없습니다.

Deschen

나는 나의 지혜 끝에 있습니다. 내 파이프 라인에서 다소 간단한 mutate를 시도하고 있지만, 특정 예제의 경우 R은 작동을 거부합니다. 죄송합니다. 재현 가능한 예를 제공 할 수 없습니다 (아래에 언급 된 이유).

그래서 이것은 내 전체 파이프 라인입니다.

new <- old %>%
  left_join(., lookup, by = "id") %>%
  mutate(sum_0.95   = apply(across(starts_with("pred")), 1, function(x) {sum(x >= 0.95 & x < 1)}),
         sum_le_0.5 = apply(across(starts_with("pred")), 1, function(x) {sum(x <= 0.5 & x > 0)}),
         coding = case_when(pred_QC4A_code_10 == 0 | pred_QC4A_code_10 == 1 ~ "ABC",
                            sum_0.95 > 0 & (sum_0.95 + sum_le_0.5 == (lookup %>% select(starts_with("pred")) %>% names() %>% length())) ~ "DEF",
                            TRUE ~ "XYZ")) %>%
  select(-starts_with("pred"), -sum_0.95, -sum_le_0.5)

이것은 오류 메시지를 제공합니다 ( lookup %>% select(starts_with("pred")) %>% names() %>% length()case_when 부분 으로 인해 ).

# Error: Problem with `mutate()` input `coding`.
# x no applicable method for 'select' applied to an object of class "character"

문제는:

  • 똑같은 구조 / 코드 예제가 다른 데이터 세트에서도 잘 작동합니다.
  • 문제가있는 부분을 숫자 결과 (29)로 바꾸면 작동합니다.
  • lookup동일한 구조의 다른 데이터 세트로 교체 하면 작동합니다.
  • 내가 할 경우 test <- lookup파이프 라인에서 테스트하여 조회를 교체, 그것은 작동
  • 내가하면 test <- dput(lookup)위와 동일하게 작동합니다.

에 대한 검사 identical(test, lookup)도 반환 TRUE됩니다.

이것이 제가 실례를 제공 할 수없는 이유이기도합니다. 내가 무엇을하든 (예 : dput) 오류는 더 이상 재현 할 수 없습니다.

적어도 str(lookup)결과 는 다음과 같습니다.

'data.frame':   5625 obs. of  30 variables:
 $ id                 : chr  "A" "B" "C" "D" ...
 $ pred_QC4A_code_10  : num  1 0 0 1 1 1 1 0 1 1 ...
 $ pred_QC4A_code_11  : num  0 0 0 0 0 0 0 0 0 1 ...
 $ pred_QC4A_code_12  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_13  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_14  : num  0 0 0 0 0 0 0 1 0 0 ...
 $ pred_QC4A_code_15  : num  0 0 1 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_16  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_17  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_20  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_21  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_22  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_23  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_30  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_31  : num  0 1 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_32  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_33  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_34  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_40  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_41  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_42  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_43  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_44  : num  0 0 0 0 1 0 0 0 0 0 ...
 $ pred_QC4A_code_80  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_995 : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_996 : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_997 : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_998 : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_9991: num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_9992: num  0 0 0 0 0 0 0 0 0 0 ...

나는 그것이 정말로 select명령 과 관련이 있다고 생각 하지만 무슨 일이 일어나고 있는지 전혀 모릅니다.


업데이트 : 문제를 해결했습니다. 문제는 내 new데이터 프레임에라는 열이 lookup있으므로 case_when이 외부 데이터 세트 대신이 열에 액세스하므로 당연히 작동하지 않는다는 것입니다.

Akrun

고정되어 있으므로 외부에 개체를 만드는 것이 더 나을 수 있습니다.

v1 <- lookup %>%
        select(starts_with("pred")) %>% 
        names() %>% 
        length()

그런 다음 단순화 할 수 있습니다.

...
 coding = case_when(pred_QC4A_code_10 == 0 | pred_QC4A_code_10 == 1 ~ "ABC",
                        sum_0.95 > 0 & ((sum_0.95 + sum_le_0.5) == (v1))) ~ "DEF",
                        TRUE ~ "XYZ")) 

OP는 데이터 세트에 'lookup'이라는 열이 있다고 언급했습니다. 따라서 열 대신 전역 환경의 객체를 사용해야하는 경우 이스케이프 ( !!)

 new <- old %>%
  left_join(., lookup, by = "id") %>%
  mutate(sum_0.95   = apply(across(starts_with("pred")), 1, function(x) {sum(x >= 0.95 & x < 1)}),
         sum_le_0.5 = apply(across(starts_with("pred")), 1, function(x) {sum(x <= 0.5 & x > 0)}),
         coding = case_when(pred_QC4A_code_10 == 0 | pred_QC4A_code_10 == 1 ~ "ABC",
                            sum_0.95 > 0 & (sum_0.95 + sum_le_0.5 == (!!lookup %>% select(starts_with("pred")) %>% names() %>% length())) ~ "DEF",
                            TRUE ~ "XYZ")) %>%
  select(-starts_with("pred"), -sum_0.95, -sum_le_0.5)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관