用数值替换数据框列中的字符值

时间:2014-02-19 17:05:43

标签: r replace dataframe multiple-columns

我正在研究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

问题

  1. 在原始SAT数据框中,我想用$ vector 0.替换$ Num.of.SAT列中的所有's'值。
  2. 随后,我想有选择地将相应列中的所有's'值替换为0。
  3. 如何编写一个总体命令来查找并将数据框中的所有's值替换为0?

1 个答案:

答案 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]]))