从数据框中删除缺失值并重新编写它

时间:2016-11-18 03:39:25

标签: r dataframe

我想要实现的目标如下: 1)我有一个数据框,其中有一些行缺少值。我想删除它们。 2)但与此同时,我想根据其中的某个向量元素重新排序数据帧的行。

我的代码是:

x <- c(0,0,0.02,0.03,0.02,0.03,0.02,0.02,0.08,0.12,0.02,0.22,0.02,0.23,0.02,0.15) 
y <- c(0,0.03,0.01,0.13,0.08,0.12,0,0,0.02,0.2,0.01,0.17,0.04,0.11,0,0.08)
z <- x/y

我创建了一个数据框,其中包含以下元素:

data <- data.frame(x,y,z)

data
     x    y         z
1  0.00 0.00       NaN
2  0.00 0.03 0.0000000
3  0.02 0.01 2.0000000
4  0.03 0.13 0.2307692
5  0.02 0.08 0.2500000
6  0.03 0.12 0.2500000
7  0.02 0.00       Inf
8  0.02 0.00       Inf
9  0.08 0.02 4.0000000
10 0.12 0.20 0.6000000
11 0.02 0.01 2.0000000
12 0.22 0.17 1.2941176
13 0.02 0.04 0.5000000
14 0.23 0.11 2.0909091
15 0.02 0.00       Inf
16 0.15 0.08 1.8750000

我想删除Inf和NaN。我用以下代码完成了它:

data = data[!(data$z %in% c(Inf, NaN, NA)),]

data
      x    y         z
2  0.00 0.03 0.0000000
3  0.02 0.01 2.0000000
4  0.03 0.13 0.2307692
5  0.02 0.08 0.2500000
6  0.03 0.12 0.2500000
9  0.08 0.02 4.0000000
10 0.12 0.20 0.6000000
11 0.02 0.01 2.0000000
12 0.22 0.17 1.2941176
13 0.02 0.04 0.5000000
14 0.23 0.11 2.0909091
16 0.15 0.08 1.8750000

现在我按照z(递增顺序)对这些行重新排序。我用以下代码完成了它:

data = data[order(data$z),]

但我得到以下输出:

data
        x    y         z
10   0.12 0.20 0.6000000
11   0.02 0.01 2.0000000
NA     NA   NA        NA
12   0.22 0.17 1.2941176
NA.1   NA   NA        NA
4    0.03 0.13 0.2307692
14   0.23 0.11 2.0909091
NA.2   NA   NA        NA
16   0.15 0.08 1.8750000
13   0.02 0.04 0.5000000
NA.3   NA   NA        NA
6    0.03 0.12 0.2500000
9    0.08 0.02 4.0000000
5    0.02 0.08 0.2500000
3    0.02 0.01 2.0000000
2    0.00 0.03 0.0000000

它不仅没有正确重新排序,我删除的缺失值(其中4个)以某种方式复活。

为什么会这样?

如果我先订购它,然后移除Inf和NaN,我就不会遇到这类问题。当我在删除它们后尝试对它们进行重新排序时,有人可以解释为什么删除的元素会重新出现吗?

谢谢大家。

0 个答案:

没有答案