같은 행의 다른 열의 값을 기준으로 열의 일부 값을 다시 코딩하는 일부 레거시 R 코드를 상속했습니다. 당신이 결과를 검사하는 경우R : 실수로 요소 열을 사용하여 데이터 프레임의 서브 세트를 논리로 설정했습니다.
df <- data.frame(value = c(1, 2, 3, 4, 5, 6),
reversed = c("true", "false",
"true", "true",
"false", "false"))
str(df)
#> 'data.frame': 6 obs. of 2 variables:
#> $ value : num 1 2 3 4 5 6
#> $ reversed: Factor w/ 2 levels "false","true": 2 1 2 2 1 1
df$recoded_value <- df$value
df$recoded_value[df$reversed] <- 7 - df$recoded_value[df$reversed]
, 이것은 의도하지 않은 결과를 : 그 실수로, 현실에서, 그 값과 같이 (문자열로 변환되는) 요소, 실제로이었다 부울 값으로 생각되었다. df[2, "recoded_value"]
은 5이지만 그 의도는 2입니다. 또한 df[3, "recoded_value"]
은 3이지만 의도는 4입니다.
여기에 무슨 일이 일어나고 있는지 알고 싶습니다. 첫 번째 가설은 R이 하나의 요인 수준을 TRUE
으로, 다른 하나를 FALSE
으로 처리한다는 것입니다.
df[c(1,3), ]
#> value reversed recoded_value
#> 1 1 true 6
#> 3 3 true 3
df[c(2,5), ]
#> value reversed recoded_value
#> 2 2 false 5
#> 5 5 false 5
은 무슨 일 것입니다 : 동일한 요소의 수준이 가은 동일하게 취급되지 않기 때문에 그러나 이것은 분명히 사실이 아니다?
명확히하기 : 나는이 문제에 대한 해결책에 관심이 없다. 의도 한 결과를 내기 위해 코드를 수정하는 방법을 알고 있습니다. 이해하고 싶습니다.
- 왜이 코드가 작동합니까? 요인 컬럼에 기초하여 어떻게 부분 집합을 할 수 있습니까? 무엇이
`[`
도 이것을 허용하고 있습니까? - 동일한 값 (, 즉, 같은 수준의 요소)이 다른 방식으로 처리되는 이유는 무엇입니까? 이 이후에 언급 된 바와 같이
답변 주셔서 감사합니다! 왜 내가 전에 이것을 깨닫지 못했는지 모르겠다. 나는 최소한의 예제를 만들 때 빈약 한 숫자를 선택했다. 행 번호와 동일한 값을 선택해서는 안됩니다. ': -p' 어쨌든, 고마워. +1 –