2014-02-19 71 views
3

我不知道如何設置這個最簡單的方法。我有一個名爲Test的數據框,列中包含一些NA值。現在我想的值1設置爲滿足下列條件的所有領域:R:爲滿足兩個條件的某些數據設置一個值

  1. 行數> 60
  2. 如果在特定領域

到目前爲止,我有一個NA:

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

這工作,但我不知道如何設置第二個條件: -/

+1

你是第一個條件?你爲什麼要依靠行號?這似乎很脆弱。 – scottkosty

+0

你的意思是說,你只想交換60以上行的NA值?或者你是否想要更改所有以上的第60行和所有NA值? –

回答

4

如果您在bb改變這裏的元素1前兩個條件必須申請一個替代方法:

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 

這就改變了行NA所有列的4-10如果在排bb 4-10的NA

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 

這如果在bb的第4-10行中有NA,則在所有列的第4-10行中更改NA,則它會更改bb中的所有剩餘NA

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 
相關問題