我正在研究SAT分数据库:https://nycopendata.socrata.com/Education/SAT-Results/f9bf-2cp4?
这就是它的样子:
> head(SAT)
DBN SCHOOL.NAME Num.of.SAT.Test.Takers
1 01M292 HENRY STREET SCHOOL FOR INTERNATIONAL STUDIES 29
2 01M448 UNIVERSITY NEIGHBORHOOD HIGH SCHOOL 91
3 01M450 EAST SIDE COMMUNITY SCHOOL 70
4 01M458 FORSYTH SATELLITE ACADEMY 7
5 01M509 MARTA VALLE HIGH SCHOOL 44
6 01M515 LOWER EAST SIDE PREPARATORY HIGH SCHOOL 112
SAT.Critical.Reading.Avg..Score SAT.Math.Avg..Score SAT.Writing.Avg..Score
1 355 404 363
2 383 423 366
3 377 402 370
4 414 401 359
5 390 433 384
6 332 557 316
在Num.of.SAT.Test.Takers中,许多值只是角色的's'。 's'列的相应值也有's'而没有数字分数。
> SATnocandidates<-SAT[SAT$Num.of.SAT=='s', ]
> head(SATnocandidates)
DBN SCHOOL.NAME Num.of.SAT.Test.Takers
23 02M392 MANHATTAN BUSINESS ACADEMY s
24 02M393 BUSINESS OF SPORTS SCHOOL s
26 02M399 THE HIGH SCHOOL FOR LANGUAGE AND DIPLOMACY s
39 02M427 MANHATTAN ACADEMY FOR ARTS & LANGUAGE s
41 02M437 HUDSON HIGH SCHOOL OF LEARNING TECHNOLOGIES s
42 02M438 INTERNATIONAL HIGH SCHOOL AT UNION SQUARE s
SAT.Critical.Reading.Avg..Score SAT.Math.Avg..Score SAT.Writing.Avg..Score
23 s s s
24 s s s
26 s s s
39 s s s
41 s s s
42 s s s
问题
答案 0 :(得分:2)
我的评论作为答案......
使用na.strings
参数读取您的数据。假设您已将数据集的CSV版本下载到“下载”目录中,您将获得如下命令:
SAT <- read.csv("~/Downloads/SAT_Results.csv", na.strings = "s")
请注意,na.strings
参数为复数 - 您可以将多个值作为NA
读入。
如果数据已经在你的R工作区中,另一种选择就是通过强制来摆脱你的“s”值。列可能是目前的因素或字符。如果将它们转换为数字,“s”值将自动变为NA
(您将收到警告,但警告只告诉我们已经知道的内容)。
例如,假设我们从这里开始:
SAT <- read.csv("~/Downloads/SAT_Results.csv", na.strings = "s")
如果我们想在所有数字列(除前两列之外的所有列)中应用我们的操作,我们可以这样做:
SAT[-c(1, 2)] <- lapply(SAT[-c(1, 2)], function(x) as.numeric(as.character(x)))
或者,如果您只想更改第三列,可以使用以下内容:
SAT[[3]] <- as.numeric(as.character(SAT[[3]]))