#r
Вопрос:
Я сталкиваюсь с неожиданным вызовом в Р. В моем наборе данных в определенных столбцах есть NA. Некоторые из этих NAs ДОЛЖНЫ присутствовать (значения действительно отсутствуют), в то время как другие должны быть заменены на 0. Я использовал код, подобный следующему:
df1 <- data.frame(x = c(1, 2, 3, 4, 5), y = c(10, 10, NA, NA, 12), z = c(9, 9, 9, 9, 9))
for (i in nrow(df1)){
if(df1$x[i] > 3){
df1$y[i] = 0
df1$z[i] = 0
}
}
И получил этот результат
x y z
1 1 10 9
2 2 10 9
3 3 NA 9
4 4 NA 9
5 5 0 0
NA ДОЛЖЕН быть сохранен в строке 3, но NA в строке 4 должен быть заменен на 0. Кроме того, значение z в строке 4 не обновлялось. Есть какие-нибудь идеи относительно того, что происходит?
Комментарии:
1. Я не знаю, насколько велик ваш реальный набор данных, но обратите внимание, что вы также можете найти
replace()
функцию полезной для этой задачи.
Ответ №1:
Вы использовали for i in nrow(df1)
то, что соответствует for i in 5
. Я предполагаю , что вы хотели использовать for i in 1:nrow(df1)
, что будет оценивать for i in 1:5
и включать все строки.
Комментарии:
1. Ах, вы совершенно правы! Огромное спасибо.
Ответ №2:
Не делайте этого таким образом, R-это не Python, вы получаете свои векторизованные функции из коробки:
df1[df1$x > 3, c('y', 'z')] <- 0
df1
# x y z
# 1 1 10 9
# 2 2 10 9
# 3 3 NA 9
# 4 4 0 0
# 5 5 0 0