子集数据计算向量中的值位置

时间:2018-05-03 16:33:13

标签: r dataframe position subset indices

我一直在寻找这个,我还没有找到有用的答案:

我有一个初始数据框:

> Ty <- c("c","v","c","c","v","v","c","c")
> y <- runif(8)
> x1 <- runif(8)
> x2 <- runif(8)
> x3 <- runif(8)
> df <- data.frame(Ty,y,x1,x2,x3)
> df
  Ty          y        x1        x2        x3
1  c 0.20837948 0.9990686 0.6081206 0.4800121
2  v 0.98047271 0.8098506 0.3377099 0.2677663
3  c 0.11320570 0.8201667 0.6102719 0.7521935
4  c 0.78059215 0.9227924 0.8973975 0.9731085
5  v 0.42921617 0.4732868 0.5234706 0.8788630
6  v 0.88079516 0.2566475 0.9642301 0.2265124
7  c 0.08974227 0.6505454 0.8664035 0.6288450
8  c 0.99710543 0.3626812 0.2148892 0.3996121

我只需要使用Type =“C”的数据,所以我继续将其子集化:

> df.c <- subset(df,Ty=="c")
> df.c
  Ty          y        x1        x2        x3
1  c 0.20837948 0.9990686 0.6081206 0.4800121
3  c 0.11320570 0.8201667 0.6102719 0.7521935
4  c 0.78059215 0.9227924 0.8973975 0.9731085
7  c 0.08974227 0.6505454 0.8664035 0.6288450
8  c 0.99710543 0.3626812 0.2148892 0.3996121

请注意,位置索引是从原始矩阵df中保留的。在对df矩阵进行子集化之后,我需要建立一个回归模型:

> reg <- lm(y~x1+x2+x3, data = df.c)
> pred <- predict(reg, df.c)
> pred
        1         3         4         7         8 
0.1020748 0.5735144 0.4673496 0.2027020 0.8433842 

调用pred后,它会显示原始位置索引(1,3,4,7,8),但是当我调用我需要的索引位置时,例如pred[3]想要获取值0.5735144,它为我提供了第三个位置0.4673496中的值:

> pred[3]
        4 
0.4673496 

如何从原始df矩阵中获取我需要的位置索引,在这种情况下,位置3

1 个答案:

答案 0 :(得分:2)

正如@JilberUrbina在评论中指出的那样,predict()返回的向量的行名称/名称实际上是字符向量,因此pred["3"]应该得到什么你要。

  • 如果p是一个整数,按pred[p]索引会给出向量中的第p个元素;
  • 如果p是一个字符(但不是一个因素!),pred[p]会为您提供一个名称与之匹配的元素内容p

如果你想删除一个由字符索引的值,你必须使用这个(相当笨重)的习语:

p[names(p) != "3"]

即。 p[-"3"]不起作用......