【问题标题】:How to make "For loop" based on column如何根据列制作“For循环”
【发布时间】:2019-09-21 03:56:34
【问题描述】:

在此之前我一直在使用“For 循环”。但变量通常是 k ,指的是行号。

例子:

for (k in 1:n) { 
    expression
}

我的问题是,变量是否可能是某个列? 示例:

for ("column no" in 1:n) { 
    expression
}

我经历了几次尝试和错误,现在有点卡住了。这是我的数据:

date    mold    no
22-May  1.35436 1
23-May  0.88592 1
24-May  0.81316 1
25-May  0.80856 1
26-May  0.84646 1
27-May  0.81762 1
28-May  0.79828 1
03-Jan  1.09158 2
04-Jan  0.86661 2
05-Jan  0.81908 2
06-Jan  0.7555  2
07-Jan  0.66577 2
08-Jan  0.66706 2
09-Jan  0.67133 2
05-Feb  20.4366 3
06-Feb  5.77923 3
06-Feb  3.12323 3
05-Feb  2.25436 3
06-Feb  1.74551 3
06-Feb  1.52744 3
05-Feb  1.45483 3
28-Jul  1.55148 4
29-Jul  1.18882 4
30-Jul  1.10595 4
31-Jul  1.14101 4
01-Aug  1.1453  4
02-Aug  1.10113 4
03-Aug  1.09152 4
30-Nov  8.3254  5
01-Dec  4.03003 5
02-Dec  2.18026 5
03-Dec  1.40028 5
04-Dec  1.02901 5
05-Dec  0.85859 5
06-Dec  0.7776  5

我想作为 R 总结 no 列中每个组(1 到 5)的 mold 列中的值。例如,对于 no=1,它将是

1.35436 + 0.88592 + 0.81316 + 0.80856 + 0.84646 + 0.81762 + 0.79828 = 6.32436

然后重复 no = 2、3、4 等。

【问题讨论】:

  • 你可以使用aggregate而不需要任何for循环,aggregate(mold~no, df, sum)
  • 谢谢。我试图搜索。您能否提供任何指向以前提出的类似问题的链接?
  • 是的,以前有人问过这个问题。 stackoverflow.com/questions/1660124/… 这里有很多选择,使用各种包和基础 R。
  • 这不是链接问题的骗局,因为它专门针对 for 循环
  • 是的。由于某些原因,我更喜欢它在循环中而不是使用聚合。我将要使用的函数将输出结果列表,因此使聚合显示结果变得混乱。我在示例中使用的 sum 函数只是询问的简化版本。

标签: r loops for-loop


【解决方案1】:

我们可以遍历唯一元素,比较 (==) 并获得与布尔向量对应的“模具”元素的 sum

un1 <- unique(df1$no)
v1 <- numeric(length(un1))

for(i in seq_along(v1)) v1[i] <- sum(df1$mold[df1$no== un1[i]])
v1
#[1]  6.32436  5.53693 36.32120  8.32521 18.60117

rowsum一样

rowsum(df1$mold, df1$no)[,1]
#        1        2        3        4        5 
#  6.32436  5.53693 36.32120  8.32521 18.60117 

数据

df1 <- structure(list(date = c("22-May", "23-May", "24-May", "25-May", 
"26-May", "27-May", "28-May", "03-Jan", "04-Jan", "05-Jan", "06-Jan", 
"07-Jan", "08-Jan", "09-Jan", "05-Feb", "06-Feb", "06-Feb", "05-Feb", 
"06-Feb", "06-Feb", "05-Feb", "28-Jul", "29-Jul", "30-Jul", "31-Jul", 
"01-Aug", "02-Aug", "03-Aug", "30-Nov", "01-Dec", "02-Dec", "03-Dec", 
"04-Dec", "05-Dec", "06-Dec"), mold = c(1.35436, 0.88592, 0.81316, 
0.80856, 0.84646, 0.81762, 0.79828, 1.09158, 0.86661, 0.81908, 
0.7555, 0.66577, 0.66706, 0.67133, 20.4366, 5.77923, 3.12323, 
2.25436, 1.74551, 1.52744, 1.45483, 1.55148, 1.18882, 1.10595, 
1.14101, 1.1453, 1.10113, 1.09152, 8.3254, 4.03003, 2.18026, 
1.40028, 1.02901, 0.85859, 0.7776), no = c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L)),
class = "data.frame", row.names = c(NA, 
-35L))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多