介绍
在数据分析中,您可能需要解决数据集中存在的缺失值、负值或不准确值。
在本文中,您将探索如何在 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 中用0
或NA
取代负值
在数据分析过程中,有时你会想用0
或NA
代替数据框中的负值,以避免结果的负倾向,而数据集中的负值会误导分析并产生错误的准确性。
考虑以下负值的输入数据集:
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()
,您可以切换 NA
、 0
和负值,以便在适当的情况下清除大型数据集进行分析。
继续学习使用 如何在 R 中使用 sub()
和 gsub()
。