如何在 R 中使用 `replace()` 和 `is.na()` 替换值

介绍

在数据分析中,您可能需要解决数据集中存在的缺失值、负值或不准确值。

在本文中,您将探索如何在 R 中使用代替()is.na()函数。

前提条件

要完成本教程,您将需要:

替换( )替换矢量中的值

本节将展示如何在矢量中替换一个值。

R语法中的替代()函数包括矢量、索引矢量和替代值:

1replace(target, index, replacement)

首先,创建一个矢量:

1df <- c('apple', 'orange', 'grape', 'banana')
2df

这将创建一个带有苹果橙色葡萄香蕉的矢量:

1[secondary_label Output]
2"apple"  "orange"  "grape"  "banana"

现在,让我们代替列表中的第二个项目:

1dy <- replace(df, 2, 'blueberry')
2dy

这将取代橙色蓝莓:

1[secondary_label Output]
2"apple"  "blueberry"  "grape"  "banana"

现在,我们将取代列表中的第四个项目:

1dx <- replace(dy, 4, 'cranberry')
2dx

这将取代香蕉cranberry:

1[secondary_label Output]
2"apple"  "blueberry"  "grape"  "cranberry"

NA值替换为R中的0

考虑一个场景,您有一个包含测量的数据框架:

 1[label air_quality]
 2    Ozone Solar.R Wind Temp Month Day
 31 41 190 7.4 67 5 1
 42 36 118 8.0 72 5 2
 53 12 149 12.6 74 5 3
 64 18 313 11.5 62 5 4
 75 NA NA 14.3 56 5 5
 86 28 NA 14.9 66 5 6
 97 23 299 8.6 65 5 7
108 19 99 13.8 59 5 8
119 8 19 20.1 61 5 9
1210 NA 194 8.6 69 5 10
1311 7 NA 6.9 74 5 11
1412 16 256 9.7 69 5 12

以下是 CSV 格式的数据:

 1[label air_quality.csv]
 2Ozone,Solar.R,Wind,Temp,Month,Day
 341,190,7.4,67,5,1
 436,118,8.0,72,5,2
 512,149,12.6,74,5,3
 618,313,11.5,62,5,4
 7NA,NA,14.3,56,5,5
 828,NA,14.9,66,5,6
 923,299,8.6,65,5,7
1019,99,13.8,59,5,8
118,19,20.1,61,5,9
12NA,194,8.6,69,5,10
137,NA,6.9,74,5,11
1416,256,9.7,69,5,12

此包含NA字符串,用于数据缺失的情况下不可用

您可以用0取代NA值。

首先,定义数据框架:

1df <- read.csv('air_quality.csv')

使用 is.na() 来检查一个值是否为 NA. 然后,用 0 替换 NA 值:

1df[is.na(df)] <- 0
2df

数据框架现在是:

 1[secondary_label Output]
 2    Ozone Solar.R Wind Temp Month Day
 31 41 190 7.4 67 5 1
 42 36 118 8.0 72 5 2
 53 12 149 12.6 74 5 3
 64 18 313 11.5 62 5 4
 75 0 0 14.3 56 5 5
 86 28 0 14.9 66 5 6
 97 23 299 8.6 65 5 7
108 19 99 13.8 59 5 8
119 8 19 20.1 61 5 9
1210 0 194 8.6 69 5 10
1311 7 0 6.9 74 5 11
1412 16 256 9.7 69 5 12

数据框中所有NA的发生都被取代了。

用 R 中的值的平均值取代NA

在数据分析过程中,在许多情况下,通过用平均值代替NA值来提高准确性。

为了克服这种情况,NA值被其他值的平均值取代,这种方法在没有任何数据损失的情况下产生良好的准确性方面至关重要。

考虑以下输入数据集与NA值:

 1[label air_quality]
 2    Ozone Solar.R Wind Temp Month Day
 31 41 190 7.4 67 5 1
 42 36 118 8.0 72 5 2
 53 12 149 12.6 74 5 3
 64 18 313 11.5 62 5 4
 75 NA NA 14.3 56 5 5
 86 28 NA 14.9 66 5 6
 97 23 299 8.6 65 5 7
108 19 99 13.8 59 5 8
119 8 19 20.1 61 5 9
1210 NA 194 8.6 69 5 10
1311 7 NA 6.9 74 5 11
1412 16 256 9.7 69 5 12
1df <- read.csv('air_quality.csv')

使用is.na()mean()来取代NA:

1df$Ozone[is.na(df$Ozone)] <- mean(df$Ozone, na.rm = TRUE)

首先,此代码在臭氧列中找到NA的所有发生,然后计算Ozone列中的所有值的平均值,而NA值不包括na.rm参数,然后将NA的每个实例替换为计算的平均值。

然后 round() 将值转为整数:

1df$Ozone <- round(df$Ozone, digits = 0)

数据框架现在是:

 1[secondary_label Output]
 2    Ozone Solar.R Wind Temp Month Day
 31 41 190 7.4 67 5 1
 42 36 118 8.0 72 5 2
 53 12 149 12.6 74 5 3
 64 18 313 11.5 62 5 4
 75 21 NA 14.3 56 5 5
 86 28 NA 14.9 66 5 6
 97 23 299 8.6 65 5 7
108 19 99 13.8 59 5 8
119 8 19 20.1 61 5 9
1210 21 194 8.6 69 5 10
1311 7 NA 6.9 74 5 11
1412 16 256 9.7 69 5 12

臭氧列中的NA值现在被臭氧列中的值的圆形平均值(21)取代。

在 R 中用0NA取代负值

在数据分析过程中,有时你会想用0NA代替数据框中的负值,以避免结果的负倾向,而数据集中的负值会误导分析并产生错误的准确性。

考虑以下负值的输入数据集:

 1[label negative_values.csv]
 2    count entry1 entry2 entry3
 3 1 1 345    -234 345
 4 2 2 65 654 867
 5 3 3 23 345 3456
 6 4 4 87 876 9
 7 5 5 2345 34 867
 8 6 6 876 98 76
 9 7 7 35    -456 123
10 8 8 87 98 345
11 9 9    -765 67 765
1210 10 4567     -87 234

以下是 CSV 格式的数据:

 1count,entry1,entry2,entry3
 21,345,-234,345
 32,65,654,867
 43,23,345,3456
 54,87,867,9
 65,2345,34,867
 76,876,98,76
 87,35,-456,123
 98,87,98,345
109,-765,67,765
1110,4567,-87,234

阅读 CSV 文件:

1df <- read.csv('negative_values.csv')

将负值替换为0

使用replace()来将entry2列中的负值更改为0:

1data_zero <- df
2data_zero$entry2 <- replace(df$entry2, df$entry2 < 0, 0) 
3data_zero

数据框架现在是:

 1[secondary_label Output]
 2   count entry1 entry2 entry3
 31 1 345 0 345
 42 2 65 654 867
 53 3 23 345 3456
 64 4 87 867 9
 75 5 2345 34 867
 86 6 876 98 76
 97 7 35 0 123
108 8 87 98 345
119 9   -765 67 765
1210 10 4567 0 234

entry2列中的负值已被0取代。

NA取代负值

使用replace()entry2列中的负值更改为NA:

1data_na <- df
2data_na$entry2 <- replace(df$entry2, df$entry2 < 0, NA)
3data_na

数据框架现在是:

 1[secondary_label Output]
 2   count entry1 entry2 entry3
 31 1 345 NA 345
 42 2 65 654 867
 53 3 23 345 3456
 64 4 87 867 9
 75 5 2345 34 867
 86 6 876 98 76
 97 7 35 NA 123
108 8 87 98 345
119 9   -765 67 765
1210 10 4567 NA 234

entry2列中的负值已被NA取代。

结论

在数据框中替换值是 R 中用于数据分析的方便选项. 在 R 中使用 replace(),您可以切换 NA0 和负值,以便在适当的情况下清除大型数据集进行分析。

继续学习使用 如何在 R 中使用 sub()gsub()

Published At
Categories with 技术
Tagged with
comments powered by Disqus