我忘了连接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
答案 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创建。