【问题标题】:Value position in calculated vector from subset data从子集数据计算的向量中的值位置
【发布时间】:2023-04-04 11:54:01
【问题描述】:

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

我有一个初始数据框:

> 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

【问题讨论】:

  • pred[3] 正在位置 3 处寻找值。相反,您所称的 original position indices (1,3,4,7,8) 不再是索引,它们是向量元素的名称。也许你想让pred[names(pred)=="3"] 得到0.5735144
  • 或者只是pred["3"]
  • 只要去掉那些不符合要求的坏名字:pred = unname(pred)。对于这种情况,依赖整数行名是不好的。
  • 谢谢大家!非常简单但非常有用!
  • 我还有一个与这个主题相关的问题,如果你能帮我解决一下。如果我需要摆脱该值 pred["3"] 怎么办?我试过pred[-"3"]得到一个错误。有没有一种无需创建新数据框的方法?

标签: r dataframe position subset indices


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 刚刚检查过,如果p 是一个因素,它将被视为一个整数,并且将使用它的级别编号,而不是标签。例如,p = factor("Datsun 710"); mtcars[p, ] 返回第一行“Mazda RX4”。
  • 感谢您的快速回答,非常有帮助。我有另一个与这个主题相关的问题,如果你能帮我快速解决它。如果我需要摆脱那个值 pred["3"] 怎么办?我试过 pred[-"3"] 出错。有没有一种无需创建新数据框的方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 2011-01-08
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多