【发布时间】:2014-03-20 04:34:01
【问题描述】:
我正在研究 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
问题
- 在原始 SAT 数据帧中,我想用数字向量 0 替换 $Num.of.SAT 列中的所有 's' 值。
- 随后,我想选择性地将相应列中的所有 's' 值替换为 0。
- 如何编写一个总体命令来查找数据框中的所有 's' 值并将其替换为 0?
【问题讨论】:
-
“s”是缺失值吗?如果是这样,在读取数据时将“s”设置为
na.strings值.... -
确实,NA 可能比 0 好。(0 会弄乱您的直方图、相关性、平均值...)
-
阿南达,我是一个没有编程背景的初学者。它可能是一个缺失值,但我宁愿将其设置为数字 0。因为最终我需要添加行、列并做饼图/箱线图等。
-
@vagabond:更有理由希望它是 NA(意思是缺失值)而不是零。如果您显示箱线图,NA 值将被自动删除。如果您将它们设置为 0,您的箱线图将拉伸为零,并且看起来很多人未通过测试。同样,如果您想找到测试的中位数或均值,只需设置
na.rm=TRUE,它们就会被删除:但您的零值会使均值/中位数偏低。 -
@vagabond,
NA即使你声明你必须做的事情,仍然会比 0 好。NA和 0 表示完全不同的东西......
标签: r replace dataframe multiple-columns