如何将R数据帧中的字符串转换为NA?

我们经常会在数据收集过程中发现错误,这些错误可能会导致研究结果不正确。当错误地收集数据时,将使分析师的工作变得困难。显示数据有错误的一种情况是获取字符串代替数字值。因此,我们需要将这些字符串转换为R中的NA,以便我们可以进行预期的分析。

示例

请看以下数据帧-

> x1<-rep(c(1,3,6,7,5,2,"XYZ",12,4,5),times=2)
> x2<-rep(c(67,"XYZ",45,32,52),each=4)
> df<-data.frame(x1,x2)
> df
 x1 x2
1 1 67
2 3 67
3 6 67
4 7 67
5 5 XYZ
6 2 XYZ
7 XYZ XYZ
8 12 XYZ
9 4 45
10 5 45
11 1 45
12 3 45
13 6 32
14 7 32
15 5 32
16 2 32
17 XYZ 52
18 12 52
19 4 52
20 5 52

将所有XYZ转换为NA-

> df[df=="XYZ"]<-NA
> df
     x1  x2
 1   1   67
 2   3   67
 3   6   67
 4   7   67
 5   5  <NA>
 6   2  <NA>
 7 <NA> <NA>
 8  12  <NA>
 9   4   45
10   5   45
11   1   45
12   3   45
13   6   32
14   7   32
15   5   32
16   2   32
17 <NA>  52
18  12   52
19   4   52
20   5   52

让我们再看一个例子-

> ID<-c("Class",2:20)
> ID<-c("Class",1:19)
> Group<-rep(c("Class",2,3,4,5),times=4)
> df1<-data.frame(ID,Group)
> df1
     ID  Group
 1 Class Class
 2  1   2
 3  2   3
 4  3   4
 5  4   5
 6  5 Class
 7  6   2
 8  7   3
 9  8   4
10  9   5
11 10 Class
12 11   2
13 12   3
14 13   4
15 14   5
16 15 Class
17 16   2
18 17   3
19 18   4
20 19   5
> df1[df1=="Class"]<-NA
> df1
ID Group
1 <NA> <NA>
2 1 2
3 2 3
4 3 4
5 4 5
6 5 <NA>
7 6 2
8 7 3
 9 8 4
10 9 5
11 10 <NA>
12 11 2
13 12 3
14 13 4
15 14 5
16 15 <NA>
17 16 2
18 17 3
19 18 4
20 19 5