数值常量/遗忘在r中并置

时间:2018-08-22 15:55:17

标签: r dplyr concatenation numeric

我忘了连接finalgrade列,现在在我尝试尝试的任何操作中,如果没有得到短语NA,就无法擦除Error: unexpected numeric constant in "grades$NA"列。我不想重做整个data.frame,特别是如果再次发生这种情况。

grades<-mutate(grades,finalgrade=NA,NA,NA,NA,NA,NA)

grades
  students    class exam1 exam2 exam3 finalexam finalgrade NA
1     Bill Freshman    80    90    90        92         NA NA
2    Jimbo Sophmore    90    75    50        95         NA NA
3     Jeff   Junior    90    90    95        90         NA NA
4      Jim   Senior    75    75    85        80         NA NA
5   Johnny   Junior    90    90    90        95         NA NA
6     Joey   Senior    65    70    90        45         NA NA

2 个答案:

答案 0 :(得分:2)

首先必须是

grades <- mutate(grades, finalgrade = c(NA, NA, NA, NA, NA, NA))

或更简单地说,

grades$finalgrade <- NA

和R将创建NA的列。

关于删除一列,在这种情况下为最后一列,您可以尝试为其分配NULL

grades[ncol(grades)] <- NULL

在问题的注释中,我将使用@Frank的示例来说明上面的代码。

library(dplyr)

bad <- mutate(mtcars[1:3, ], gah = NA, NA, NA)
bad
#   mpg cyl disp  hp drat    wt  qsec vs am gear carb gah NA
#1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4  NA NA
#2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4  NA NA
#3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1  NA NA

因此,有一个问题列。现在,通过为其分配NULL来删除它。

bad[ncol(bad)] <- NULL
bad
#   mpg cyl disp  hp drat    wt  qsec vs am gear carb gah
#1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4  NA
#2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4  NA
#3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1  NA

它按预期工作。

答案 1 :(得分:0)

使用dplyr::select,可以按列的名称或位置选择列。在这里,您尝试保留第1至7列,以便可以在select中使用这些位置:

library(tidyverse)

grades %>%
  select(1:7)
#>   students    class exam1 exam2 exam3 finalexam finalgrade
#> 1     Bill Freshman    80    90    90        92         NA
#> 2    Jimbo Sophmore    90    75    50        95         NA
#> 3     Jeff   Junior    90    90    95        90         NA
#> 4      Jim   Senior    75    75    85        80         NA
#> 5   Johnny   Junior    90    90    90        95         NA
#> 6     Joey   Senior    65    70    90        45         NA

更简单,更具扩展性,您可以在列名或位置前使用-选择要包括的列,还可以使用ncol获取数据框中的列数,从而选择排除最后一列:

grades %>%
  select(-ncol(.))
#>   students    class exam1 exam2 exam3 finalexam finalgrade
#> 1     Bill Freshman    80    90    90        92         NA
#> 2    Jimbo Sophmore    90    75    50        95         NA
#> 3     Jeff   Junior    90    90    95        90         NA
#> 4      Jim   Senior    75    75    85        80         NA
#> 5   Johnny   Junior    90    90    90        95         NA
#> 6     Joey   Senior    65    70    90        45         NA

reprex package(v0.2.0)于2018-08-22创建。