有没有一种方法可以解决存在所有属性都具有NA值且行名具有NA的行的问题?

时间:2019-01-26 08:57:05

标签: r

我正在尝试将我的列Math_G1,Math_G2和Math_G3的所有带有NA的行存储到数据集变量中。但是,当我这样做时,会弹出额外的行,这些行在其所有属性(包括行号)(例如NA.1,NA.2 ...)中都具有值作为NA的值。

我已经尝试使用c()函数尝试滤除所有这些结果,但是这些行仍然存在,此外,我还使用了which()函数,但它们仍然存在。

这是我的代码:

==

我希望根据我的条件对输出进行过滤,但是所有行的值都不含NA,因此我不明白为什么最终结果返回NA。

这是数据集dat_small的预览:


dat <- read.csv(file = "final merged.csv", stringsAsFactors=FALSE, na.strings=c("NA", "NULL")) 

dat_small <- dat[c("age","traveltime","studytime",
                       "failures","famrel","freetime","goout","Dalc","Walc",
                       "health","absences","Math_G1","Math_G2","Math_G3","Por_G1","Por_G2","Por_G3","DoubleSub")]

sample_size <- 500

all_set <- sample(1:length(dat[,1]),sample_size,replace = F)

dat <- dat_small[all_set,]

index_na_math <- which(is.na(c(dat$Math_G1,dat$Math_G2,dat$Math_G3)))
index_na_por <- which(is.na(c(dat$Por_G1,dat$Por_G2,dat$Por_G3)))
index_na_both <- c(index_na_math,index_na_por)

#each row of my dataset helps define a specific student
#portugese and math are subjects that students within the dataset takes

dat_purepor <- dat[which(index_na_math),] #students who takes only portugese
dat_puremath <- dat[c(index_na_por),] # students who takes only math 
dat_math <- dat[c(-index_na_math),] #students who takes math + students who take both
dat_por <- dat[c(-index_na_por),] #students who take portugese + students who take both
dat_both <- dat[c(-index_na_both),] #students who takes both math and portugese 

dat_purepor 
dat_puremath

这是我运行dat_puremath数据集时发生的情况的预览。

> dat_small
    age traveltime studytime failures famrel freetime goout Dalc Walc health absences Math_G1 Math_G2 Math_G3 Por_G1 Por_G2 Por_G3 DoubleSub
1    18          2         2        0      4        3     4    1    1      3        6       5       6       6     13     13     13         1
2    17          1         2        0      5        3     3    1    1      3        4       5       5       6     15     15     15         1
3    15          1         2        3      4        3     2    2    3      3       10       7       8      10     10     12     13         1
4    15          1         3        0      3        2     2    1    1      5        2      15      14      15     14     14     14         1
5    16          1         2        0      4        3     2    1    2      5        4       6      10      10     13     13     13         1
6    16          1         2        0      5        4     2    1    2      5       10      15      15      15     10     13     13         1
7    16          1         2        0      4        4     4    1    1      3        0      12      12      11     14     14     16         1
8    17          2         2        0      4        1     4    1    1      1        6       6       5       6     12     13     13         1
9    15          1         2        0      4        2     2    1    1      1        0      16      18      19     13     17     17         1
10   15          1         2        0      5        5     1    1    1      5        0      14      15      15      9     10     11         1
11   15          1         2        0      3        3     3    1    2      2        0      10       8       9     15     15     15         1
12   15          3         3        0      5        2     2    1    1      4        4      10      12      12     10     12     13         1
13   15          1         1        0      4        3     3    1    3      5        2      14      14      14     13     14     15         1
14   15          2         2        0      5        4     3    1    2      3        2      10      10      11     14     14     14         1
15   15          1         3        0      4        5     2    1    1      3        0      14      16      16     11     12     14         1
16   16          1         1        0      4        4     4    1    2      2        4      14      14      14      9      8      9         1
17   16          1         3        0      3        2     3    1    2      2        6      13      14      14     10     10     16         1
18   16          3         2        0      5        3     2    1    1      4        4       8      10      10     11     11     11         1
19   17          1         1        3      5        5     5    2    4      5       16       6       5       5     10     13     13         1
20   16          1         1        0      3        1     3    1    3      5        4       8      10      10     14     14     14         1
21   15          1         2        0      4        4     1    1    1      1        0      13      14      15      9      8     10         1
22   15          1         1        0      5        4     2    1    1      5        0      12      15      15     10     13     13         1
23   16          1         2        0      4        5     1    1    3      5        2      15      15      16     11     10     11         1
24   16          2         2        0      5        4     4    2    4      5        0      13      13      12     14     14     14         1
25   15          1         3        0      4        3     2    1    1      5        2      10       9       8     10     11     10         1
26   16          1         1        2      1        2     2    1    3      5       14       6       9       8     13     13     13         1
27   15          1         1        0      4        2     2    1    2      5        2      12      12      11     12     11     12         1
28   15          1         1        0      2        2     4    2    4      1        4      15      16      15     14     12     12         1
29   16          1         2        0      5        3     3    1    1      5        4      11      11      11     10     10      1         1
30   16          1         2        0      4        4     5    5    5      5       16      10      12      11      9     12     12         1
31   15          1         2        0      5        4     2    3    4      5        0       9      11      12      9     10     11         1
32   15          2         2        0      4        3     1    1    1      5        0      17      16      17     14     14     16         1
33   15          1         2        0      4        5     2    1    1      5        0      17      16      16     14     14     16         1
34   15          1         2        0      5        3     2    1    1      2        0       8      10      12     10     13     13         1
35   16          1         1        0      5        4     3    1    1      5        0      12      14      15      9     12     12         1
36   15          2         1        0      3        5     1    1    1      5        0       8       7       6     14     13     12         1
37   15          1         3        0      5        4     3    1    1      4        2      15      16      18     14     14     16         1
38   16          2         3        0      2        4     3    1    1      5        7      15      16      15      9      9      8         1
39   15          1         3        0      4        3     2    1    1      5        2      12      12      11     14     13     12         1
40   15          1         1        0      4        3     1    1    1      2        8      14      13      13     14     13     12         1
41   16          2         2        1      3        3     3    1    2      3       25       7      10      11     13     13     13         1
42   15          1         1        0      5        4     3    2    4      5        8      12      12      12     10     13     13         1
43   15          1         2        0      4        3     3    1    1      5        2      19      18      18      9     12     12         1
44   15          1         1        0      5        4     1    1    1      1        0       8       8      11     10     13     13         1
45   16          2         2        1      4        3     3    2    2      5       14      10      10       9     11     11     11         1
46   15          1         2        0      5        2     2    1    1      5        8       8       8       6     12     11     12         1
47   16          1         2        0      2        3     5    1    4      3       12      11      12      11     10     11     11         1
48   16          1         4        0      4        2     2    1    1      2        4      19      19      20     14     14     16         1
49   15          1         2        0      4        3     3    2    2      5        2      15      15      14     10     13     13         1
50   15          1         2        1      4        4     4    1    1      3        2       7       7       7     15     15     15         1
51   16          3         2        0      4        3     3    2    3      4        2      12      13      13     13     13     13         1
52   15          1         2        0      4        3     3    1    1      5        2      11      13      13     16     14     16         1
53   15          2         1        1      5        5     5    3    4      5        6      11      11      10     14     14     16         1
54   15          1         1        0      3        3     4    2    3      5        0       8      10      11     11     12     13         1
55   15          1         1        0      5        3     4    4    4      1        6      10      13      13     13     12     13         1
 [ reached getOption("max.print") -- omitted 889 rows ]

有人可以解释为什么会发生这种情况以及如何解决吗?谢谢!

1 个答案:

答案 0 :(得分:1)

在建立索引时,使用is.na(c(dat$Math_G1,dat$Math_G2,dat$Math_G3))会创建一个长度为3*nrow(dat)的数组,因此在应用索引时,一旦超过索引编号nrow(dat),它的行为将不会达到预期的效果。

尝试以下

index_na_math <- (is.na(dat$Math_G1) | is.na(dat$Math_G2) | is.na(dat$Math_G3))

与另一个相似,然后

index_na_both <- index_na_math | index_na_por
# or depending what you mean by 'both'
index_na_both <- index_na_math & index_na_por

使用dat_math <- dat[!index_na_math,]的子集将产生预期的结果(其他情况则是如此)。