替换R中数据帧的子矩阵中的值

时间:2014-09-12 16:41:31

标签: r

我有一个数据框,比如说x,我希望将0值替换为NA,对于c("A", "B", "C", "D")行替换行1:10 }。这样做有效/紧凑吗?

1 个答案:

答案 0 :(得分:1)

尝试: 如果您想替换整个数据集的NA&#cs:

set.seed(41)
d1 <- as.data.frame( matrix(sample(0:5, 4*10, replace=TRUE), dimnames=list(NULL, LETTERS[1:4]), ncol=4))
 d1[!d1] <- NA
 d1

如果数据集中有更多列,并且只想替换列的子集:

set.seed(41)
d2 <- as.data.frame( matrix(sample(0:5, 8*10, replace=TRUE), dimnames=list(NULL, LETTERS[1:8]), ncol=8))
d2[,LETTERS[1:4]][!d2[,LETTERS[1:4]]] <- NA
d2
 #   A  B  C D E F G H
#1   1  4 NA 3 1 5 2 1
#2   5  4  4 3 5 4 5 0
#3   3  4  1 4 5 1 0 4
#4  NA  1  4 5 3 5 1 1
#5   5 NA  5 4 0 0 4 5
#6   5  4  3 4 2 0 4 5
#7   5  5  2 3 2 1 3 4
#8   3 NA  1 1 5 0 2 0
#9   4  5  2 5 3 0 0 1
#10  4 NA  2 5 4 1 1 0

如果是5行4列的子集

d2[1:5, LETTERS[1:4]][!d2[1:5, LETTERS[1:4]]] <- NA
 d2
 #    A  B  C D E F G H
 #1   1  4 NA 3 1 5 2 1
 #2   5  4  4 3 5 4 5 0
 #3   3  4  1 4 5 1 0 4
 #4  NA  1  4 5 3 5 1 1
 #5   5 NA  5 4 0 0 4 5
 #6   5  4  3 4 2 0 4 5
 #7   5  5  2 3 2 1 3 4
 #8   3  0  1 1 5 0 2 0
 #9   4  5  2 5 3 0 0 1
 #10  4  0  2 5 4 1 1 0

您可以检查以上两种情况的结果差异