R:为满足两个条件的某些数据设置一个值

时间:2014-02-19 10:32:59

标签: r dataframe

我不知道如何设置这是最简单的方法。我有一个名为Test的数据框,其中一列包含一些NA值。现在我想为满足以下条件的所有字段设置值1:

  1. 行号> 60
  2. 如果特定字段中有NA
  3. 到目前为止,我有:

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

    这有效,但我不知道如何设置第二个条件: - /

3 个答案:

答案 0 :(得分: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

如果NA的第4-10行中有NA,则会在所有列的第4-10行中更改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

   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行中有NA,则会更改所有列的第4-10行中的bb,然后它会更改NA中的所有剩余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[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

答案 1 :(得分:3)

你可以像这样设置rownumber:

Test$RowNumber <- 1:nrow(Test)

然后条件是:

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

答案 2 :(得分:1)

您可以获得所需的结果

Test[60:nrow(Test),][is.na(Test[60:nrow(Test),])]<-1