2014-02-19 2 views
3

Я не знаю, как установить этот самый простой способ. У меня есть dataframe, называемый Test, с столбцом, содержащим некоторые значения NA. Теперь я хочу, чтобы установить значение 1 для всех полей, удовлетворяющих следующим условиям:R: Установить значение для определенных данных, удовлетворяющих двум условиям

  1. номер строки> 60
  2. если есть NA в конкретной области

До сих пор у меня есть:

Test$MyColumn[is.na(Test$MyColumn)] <- 1 

Это работает, но я не знаю, как установить второе условие: -/

+1

Вы имеете в виду первое условие? И почему вы хотите зависеть от номера строки? Это кажется хрупким. – scottkosty

+0

Вы имеете в виду, что вы хотите только обменять NA-значения в строках выше номера 60? Или вы хотите изменить все выше число строк 60 и все значения NA? –

ответ

4

Если оба условия должны применяться, прежде чем изменить элемент 1 в bb здесь альтернатива:

aa <- 1:10 
bb <- c(1,NA,6,4,NA,9,1,NA,2,5) 
cc <- c(100,102,104,NA,78,54,99,NA,22,0) 
dd <- data.frame(aa,bb,cc) 
dd 
dd$bb[4:nrow(dd)][is.na(dd$bb[4:nrow(dd)])] <- 1 
dd 

Вот исходный набор данных:

aa bb cc 
1 1 1 100 
2 2 NA 102 
3 3 6 104 
4 4 4 NA 
5 5 NA 78 
6 6 9 54 
7 7 1 99 
8 8 NA NA 
9 9 2 22 
10 10 5 0 

Здесь модифицированный набор данных:

aa bb cc 
1 1 1 100 
2 2 NA 102 
3 3 6 104 
4 4 4 NA 
5 5 1 78 
6 6 9 54 
7 7 1 99 
8 8 1 NA 
9 9 2 22 
10 10 5 0 

Это приводит к изменению в строках 4-10 NA всех столбцов, если есть в строках 4-10 из bbNA:

aa <- 1:10 
bb <- c(1,NA,6,4,NA,9,1,NA,2,5) 
cc <- c(100,102,104,NA,78,54,99,NA,22,0) 
dd <- data.frame(aa,bb,cc) 
dd 
dd[4:nrow(dd),1:3][is.na(dd$bb[4:nrow(dd)]),] <- 1 
dd 

    aa bb cc 
1 1 1 100 
2 2 NA 102 
3 3 6 104 
4 4 4 NA 
5 1 1 1 
6 6 9 54 
7 7 1 99 
8 1 1 1 
9 9 2 22 
10 10 5 0 

Это изменяется NA в строках 4-10 всех столбцов, если в строках 4-10 из bb есть NA, затем он меняет все остальные NA в bb:

aa <- 1:10 
bb <- c(1,NA,6,4,NA,9,1,NA,2,5) 
cc <- c(100,102,104,NA,78,54,99,NA,22,0) 
dd <- data.frame(aa,bb,cc) 
dd 
dd[4:nrow(dd),1:3][is.na(dd$bb[4:nrow(dd)]),] <- 1 
dd$bb[is.na(dd$bb)] <- 1 
dd 

    aa bb cc 
1 1 1 100 
2 2 1 102 
3 3 6 104 
4 4 4 NA 
5 1 1 1 
6 6 9 54 
7 7 1 99 
8 1 1 1 
9 9 2 22 
10 10 5 0 
3

Вы можете установить RowNumber так:

Test$RowNumber <- 1:nrow(Test) 

И тогда условие будет:

Test$MyColumn[is.na(Test$MyColumn) & Test$RowNumber>60] <- 1 
1

Вы можете получить желаемый результат, как

Test[60:nrow(Test),][is.na(Test[60:nrow(Test),])]<-1 
Смежные вопросы