Цикл по столбцу и возвращаемое значение - PullRequest
2 голосов
/ 05 марта 2020

Я хочу провести l oop через один из столбцов в моем фрейме данных и проверить условие, затем заменить 0 или 1. Код:

for (i in v$R){
     if( is.na(v$R) ==TRUE ){v$V5 = 0}else{v$V5=1}
}

Но я получаю ошибку. Фрейм данных с именем 'v' выглядит следующим образом. V5 имеет значения NA, и я хочу заменить на 0, если значения в столбцах R равны NA, а в противном случае заменить на 1. Как я могу это сделать?

A B R V5
1 2 3 NA
4 5 NA NA

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Попробуйте это:

v$V5 <- ifelse(is.na(v$R), 0, 1)
1 голос
/ 05 марта 2020
  • Вы можете попробовать ifelse, как показано ниже
df <- within(df,V5 <- ifelse(is.na(R),0,1))

или + (который преобразует логические значения в числовые)

df <- within(df,V5 <- +!is.na(R))

, так что

> df
  A B  R V5
1 1 2  3  1
2 4 5 NA  0
  • Если вы хотите использовать петли, вы можете попробовать
for (i in seq_along(df$R)){
  if( is.na(df$R[i]) ==TRUE ){df$V5[i] = 0}else{df$V5[i]=1}
}

ДАННЫЕ

df <- structure(list(A = c(1L, 4L), B = c(2L, 5L), R = c(3L, NA), V5 = c(NA, 
NA)), class = "data.frame", row.names = c(NA, -2L))
...