Я унаследовал некоторый старый код 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 –