Проблема с присвоением df $ COLUMN[x] = df2 $ COLUMN[y] в R

#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. Вы правы! Я забыл проверить класс моих переменных… Это действительно было фактором. Спасибо 🙂