如何从R中for循环的迭代结果获取向量?

cecihes

我有这个数据帧(df),并且当“ ID”列与给定向量(idvector)的值匹配时,我需要在“ amountN”列中获取值的向量,因此我创建了一个for循环我通过打印df $ amountN的值进行测试,以检查它们是否确实满足df $ ID条件,并且它们确实可以。这是for循环:

df
      amountS amountN  ID
64693   0.440    0.55 028
64702   0.360    0.52 028
64708   0.220    0.33 028
64714   0.500    0.27 028
64720   0.280    0.51 028
64726   0.520    0.47 028
64732   0.410    0.25 028
64735   0.090    0.11 028
64741   0.220    0.17 028
64750   0.630    0.48 028
64756   0.430    0.35 028
64762   1.200    0.40 028
65150   4.425   14.95 029
65156   5.035   23.60 029
65163   5.810   26.20 029

idvector <- c("010","025","028")

for(i in seq_len(nrow(df))){
    for (j in seq_len(length(idvector))){
      if(df$ID[i] == idvector[j]){
        print(df$amountN[i])
      }
    }
  }

到现在为止还挺好。但是,我已经尝试了很多事情,通过在最后一行更改函数print()将这些值转换为向量,但是似乎没有任何效果:

for(i in seq_len(nrow(df))){
    for (j in seq_len(length(idvector))){
      if(df$ID[i] == idvector[j]){
        x <- c(df$amountN[i])
      }
      x
    }
  }

我还尝试获取df $ amounN的子集,然后使用库中的数据subsetselectdplyr中将数据转换为矢量,但也没有得到,而是得到NULL:

for(i in seq_len(nrow(df))){
    for (j in seq_len(length(idvector))){
      if(df$ID[i] == idvector[j]){
        x <- subset(df$amountN[i,])
      }
      x
    }
  }

我查看了数据,发现值看起来像这样:

[1] 0.55
[1] 0.52
[1] 0.33
[1] 0.27
[1] 0.51
[1] 0.47
[1] 0.25
[1] 0.11
[1] 0.17
[1] 0.48
[1] 0.35
[1] 0.4

他们应该看起来像这样:

 [1]  0.55  0.52  0.33  0.27  0.51  0.47  0.25  0.11  0.17  0.48 
[11]  0.35  0.40

我确实需要一个向量或一个子集,因此我可以将汇总统计信息和其他统计信息应用于数据,但尚未弄清楚。

我正在使用R版本4.0.3

阿克伦

在中base R,我们可以使用以下命令更轻松地执行此操作subset

subset(df, ID %in% idvector, select = amountN)$amountN
#[1] 0.55 0.52 0.33 0.27 0.51 0.47 0.25 0.11 0.17 0.48 0.35 0.40

关于OP的代码,我们可以通过将“ x”定义为NULL向量然后在每个循环内串联“ x”并将其分配回“ x”来解决。另外,请确保“ idvector”具有相同的类型,即也假定它也是数字的

x <- c()
for(i in seq_len(nrow(df))){
    for (j in seq_len(length(idvector))){
      if(df$ID[i] == idvector[j]){
        x <- c(x, df$amountN[i])
      }
      x
    }
  }

-输出

x
#[1] 0.55 0.52 0.33 0.27 0.51 0.47 0.25 0.11 0.17 0.48 0.35 0.40

注意:OP代码中的问题是,在删除先前的输出时,每次迭代都会更新“ x”。需要串联

数据

df <- structure(list(amountS = c(0.44, 0.36, 0.22, 0.5, 0.28, 0.52, 
0.41, 0.09, 0.22, 0.63, 0.43, 1.2, 4.425, 5.035, 5.81), amountN = c(0.55, 
0.52, 0.33, 0.27, 0.51, 0.47, 0.25, 0.11, 0.17, 0.48, 0.35, 0.4, 
14.95, 23.6, 26.2), ID = c(28L, 28L, 28L, 28L, 28L, 28L, 28L, 
28L, 28L, 28L, 28L, 28L, 29L, 29L, 29L)), class = "data.frame", 
row.names = c("64693", 
"64702", "64708", "64714", "64720", "64726", "64732", "64735", 
"64741", "64750", "64756", "64762", "65150", "65156", "65163"
))

idvector <- c(10, 25, 28)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章