Я планировал создать новый столбец с именованным вектором, который может соответствовать именам в фрейме данных, но, похоже, сопоставление выполнено неправильно.
Вот пример кода
vector <- c(APPLE=10,BANANA=2,KIWI=3,CARROT=4,ORANGE=5)
df <- data.frame(fru=c("APPLE","KIWI","CARROT","CARROT","KIWI","ORANGE","BANANA"))
df$num <- vector[df$fru]
в этом коде вектор определяется так,
APPLE BANANA KIWI CARROT ORANGE
1 2 3 4 5
но в фрейме данных число, соответствующее КИВИ и МОРКОВКЕ, не совпадает...
fru num
1 APPLE 10
2 KIWI 4
3 CARROT 3
4 CARROT 3
5 KIWI 4
6 ORANGE 5
7 BANANA 2
есть ли какие-либо недоразумения в том, как я делаю индексацию в векторе?
Возможно, столбец «fru» — это factor
. Это должен быть character
класс.
vector[as.character(df$fru)]
# APPLE KIWI CARROT CARROT KIWI ORANGE BANANA
# 10 3 4 4 3 5 2
Начиная с R 4.0
и далее, по умолчанию stringsAsFactors = FALSE
пока мы создаем data.frame
(или читаем с read.csv/read.table
и т. д.). Если версия R
меньше 4, то stringsAsFactors = TRUE
по умолчанию. Можно указать аргумент как FALSE
при построении data.frame
или преобразовать в character
с помощью as.character
Я скопировал ваш дословный код в своей консоли RStudio, и соответствующие числа для КИВИ и МОРКОВКИ в df
совпадают с числами в vector
. Я не знаю, как вы получили другой результат.
тоже не могу понять...попробуйте на другом компе...спасибо
Это сработало отлично! Моя версия R была 3.6.1, как вы предложили. Когда я изменил класс столбца, это сработало. Спасибо!