解釋我的問題,我創建了以下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'的東西來提供一個不斷的結果 – epi99
改變。謝謝你的提示。 – Mapos