我撰寫了以下代碼,它生成一個亂數,從某個常數中減去這個亂數,記錄這個結果——然后重復這個程序 100 次:
# 1 random number
results <- list()
for (i in 1:100) {
iteration = i
number_i_1 = mean(rnorm(1,10,2))
difference_i_1 = 10 - number_i_1
results_tmp = data.frame(iteration, number_i_1, difference_i_1)
results[[i]] <- results_tmp
}
results_df_1 <- do.call(rbind.data.frame, results)
要對 2 個亂數和 3 個亂數執行此操作 - 上面的代碼只需要稍作修改:
# 2 random numbers
results <- list()
for (i in 1:100) {
iteration = i
number_i_2 = mean(rnorm(2,10,2))
difference_i_2 = 10 - number_i_2
results_tmp = data.frame( number_i_2, difference_i_2)
results[[i]] <- results_tmp
}
results_df_2 <- do.call(rbind.data.frame, results)
# 3 random numbers
results <- list()
for (i in 1:100) {
iteration = i
number_i_3 = mean(rnorm(3,10,2))
difference_i_3 = 10 - number_i_3
results_tmp = data.frame( number_i_3, difference_i_3)
results[[i]] <- results_tmp
}
results_df_3 <- do.call(rbind.data.frame, results)
我的問題:我想重復這個一般程序 20 次,并將所有結果存盤在一個資料框中。例如(注意:實際的資料框將有 20 對這樣的列):
final_frame = cbind(results_df_1 , results_df_2, results_df_3)
iteration number_i_1 difference_i_1 number_i_2 difference_i_2 number_i_3 difference_i_3
1 1 12.534059 -2.5340585 9.623655 0.3763455 9.327020 0.67298023
2 2 9.893728 0.1062721 10.135650 -0.1356502 10.037904 -0.03790384
3 3 8.895232 1.1047680 9.848402 0.1515981 7.588531 2.41146943
4 4 11.648550 -1.6485504 8.509288 1.4907120 10.294153 -0.29415334
5 5 9.045034 0.9549660 9.351834 0.6481655 11.084067 -1.08406691
6 6 9.230139 0.7698612 8.163164 1.8368356 7.846356 2.15364367
然后制作兩個平均檔案(注意:這兩個檔案中的每一個也將有 20 行):
mean_numbers = data_frame(iterations = c(1:3), mean_number = c(mean(final_frame$number_i_1),mean(final_frame$number_i_2), mean(final_frame$number_i_3) ) )
mean_differences = data_frame(iterations = c(1:3), mean_differences = c(mean(final_frame$difference_i_1),mean(final_frame$difference_i_1), mean(final_frame$difference_i_1) ) )
有人可以告訴我如何做到這一點嗎?
uj5u.com熱心網友回復:
您的初始目標可以簡化如下:
results <- list()
for (i in seq_len(100)) {
#Samples from 1 to 20 numbers, averages them
a <- unlist(lapply(seq_len(20), function(x) mean(rnorm(x, 10, 2))))
#Creates names for this vector
names(a) <- paste0(rep("number_i_", 20), 1:20)
#differences
b <- 10-a
#and it's names
names(b) <- paste0(rep("diff_i_", 20), 1:20)
#creating 40c df (there are better structures for this specially if the final outcome is to separate them)
c <- as.data.frame(cbind(rbind(a), rbind(b)))
#storing in list
results[[i]] <- c
}
results_df_3 <- do.call(rbind.data.frame, results)
有更優雅的方式來寫這個,但它足以讓你到達那里。
您最后一節中的格式對您想要實作的目標沒有意義。如果要為所采集的每個樣本數創建均值摘要,如下所示:
mockfdf <- data.frame(nsamp = 1:20, meanmeans = rnorm(20))#summarized means go here
mockddf <- data.frame(nsamp = 1:20, diffmeans = rnorm(20))#summarized means go here
然后,您可以輕松地分離資料幀的差異和均值,并通過為每個資料幀使用單獨的資料幀來更好地處理它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/479059.html
