【发布时间】:2017-05-27 20:47:00
【问题描述】:
为了解释我的问题,我创建了以下 df:
hh_01 <- c(rep(1:4, each = 3), rep(5:10, each = 5))
vill <- c(rep(100, 12), rep(101, 30))
hh_02 <- c(2:4, 1, 3, 4, 1:2, 4, 1:3, 6:10, 5, 7:10, 5:6, 8:10, 5:7, 9:10, 5:8, 10, 5:9)
set.seed(1); dist <- abs(rnorm(42, mean = 0, sd = 1000))
df <- matrix(c(hh_01, vill, hh_02, dist), nrow = 42, ncol = 4)
colnames(df) <- c("hh_01", "vill", "hh_02", "dist")
df <- as.data.frame(df)
df
hh_01 vill hh_02 dist
1 1 100 2 1728.39791
2 1 100 3 979.05280
3 1 100 4 972.09301
4 2 100 1 461.72457
5 2 100 3 384.84236
6 2 100 4 523.10665
7 3 100 1 482.88891
8 3 100 2 218.27501
9 3 100 4 878.32424
10 4 100 1 41.75679
11 4 100 2 967.72103
12 4 100 3 661.80881
13 5 101 6 851.74364
14 5 101 7 852.48595
15 5 101 8 471.51824
16 5 101 9 862.90742
17 5 101 10 750.57410
18 6 101 5 1714.03797
19 6 101 7 93.43975
20 6 101 8 640.15912
21 6 101 9 601.66437
22 6 101 10 969.44271
23 7 101 5 77.95871
24 7 101 6 604.71114
25 7 101 8 169.18386
26 7 101 9 435.42663
27 7 101 10 604.22278
28 8 101 5 475.18935
29 8 101 6 13.09895
30 8 101 7 2873.04565
31 8 101 9 1019.03810
32 8 101 10 41.51445
33 9 101 5 914.63453
34 9 101 6 67.62432
35 9 101 7 85.45653
36 9 101 8 971.21044
37 9 101 10 2074.87280
38 10 101 5 98.43913
39 10 101 6 437.63773
40 10 101 7 620.47573
41 10 101 8 376.56226
42 10 101 9 1013.93106
我的任务:对于所有具有相同值的 hh_01 计算 dist 的平均值并将结果保存在具有以下结构的新 df 中:
hh_01 vill mean_dist
1 100 1226.515
2 100 .......
我知道我必须使用 for 循环(或者可能是 sapply/lapply 或 ),但我不知道如何完成此命令...
for (i in seq(along=df[,df$hh_01])){
ifelse(df$hh_01[i] == df$hh_01[i+1])
}
我知道这些是编程的基础知识(不仅仅是在 R 中),但我不是程序员,而且在这方面还很新……) 我将不胜感激任何帮助。 代码越简单对我来说越好(请简短解释)。我想了解这种循环(或一般的循环),因为将来我必须经常处理这类问题。 非常感谢。
【问题讨论】:
-
很好,您提供了示例数据,但它是基于随机生成的值,因此总是在变化,因此无法重现。使用
set.seed=1234之类的东西来提供恒定的结果 -
已更改。谢谢你的来信。
标签: r loops for-loop dplyr sapply