#r
#r
Вопрос:
Несколько месяцев назад я сделал небольшой цикл для автоматического назначения столбцов двух фреймов данных. По сути, df содержит только значения «Глубины», а df2 содержит значения «Глубины» и «Возраста». Итак, когда значения «Глубины» равны, я могу присвоить значения «Возраста» df.
i = 1
k = 1
while (k < length(df2$Depth)) {
if (df2$Depth[k] == df$Depth[i]){
df$Age2[i] = df2$Age[k]
i = i 1
}
k = k 1
}
Недавно мне понадобилось снова использовать этот цикл, но я обнаружил, что он больше не работает, и это не из-за цикла… Каждый раз, когда я хочу присвоить значения colunm с помощью df$COLUNM[x] = df2$COLUNM[y]
, это не работает. Значение, которое присваивается для df$COLUNM[x]
вместо истинного значения df2$COLUNM[y]
, является номером строки относительно их положения.
Просто не знаю, ошибка ли это или что-то, что я делаю неправильно… Не понимаю, почему это работало еще несколько месяцев назад, а теперь нет.
Комментарии:
1. не могли бы вы добавить
dput()
изdf2
иdf
? если он слишком большой, по крайней мере,dput(head())
2. О, когда я читаю ваш комментарий, я сразу вспоминаю, что забыл проверить класс моих столбцов… Теперь я уже присвоил всем им значения numbers, и это работает отлично. Спасибо, извините за глупую ошибку 🙂
Ответ №1:
Один из способов (и единственный, который я могу придумать), чтобы это произошло, заключается в том, что вы непреднамеренно создали факторную переменную, которая выглядит как числовая, а затем присваиваете значения «истинному» числовому значению. Смотрите этот пример:
X <- rnorm(10)
y=factor(1:10)
y=factor(101:110)
X[4] <- y[5]
X
[1] -0.2093544 -1.8858439 -0.1048452 5.0000000 -1.1665309
[6] -2.1416764 1.6572388 -0.7806782 1.0002025 0.6032613
Обратите внимание, что «значение» y[5] не было «принято» X, а скорее было присвоено его относительное положение на уровнях фактора. Итак, вы должны проверить:
class(df2$Age)
Я сильно подозреваю, что результатом будет «фактор». И вы можете восстановить исходные значения с помощью:
df2$Age <- as.numeric(as.character(df2$Age))
Комментарии:
1. Вы правы! Я забыл проверить класс моих переменных… Это действительно было фактором. Спасибо 🙂