我想要实现的目标如下: 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,我就不会遇到这类问题。当我在删除它们后尝试对它们进行重新排序时,有人可以解释为什么删除的元素会重新出现吗?
谢谢大家。