我有一大組數據,我想用12個小組重新排序,使用R中的sample()函數生成隨機數據集,用它可以執行排列測試。但是,這些數據具有無法收集數據的NA字符,並且我希望在數據混洗時他們保持在各自的原始位置。按順序對NA值左右的矢量部分進行重新排序
針對先前的問題,我已成功地洗牌周圍的NA值的數據爲24個值與單個代碼向量的幫助:
example.data <- c(0.33, 0.12, NA, 0.25, 0.47, 0.83, 0.90, 0.64, NA, NA, 1.00, 0.42)
example.data[!is.na(example.data)] <- sample(example.data[!is.na(example.data)], replace = F, prob = NULL)
[1] 0.64 0.83 NA 0.33 0.47 0.90 0.25 0.12 NA NA 0.42 1.00
從這個擴展,如果我有一組數據長度爲24我將如何重新排序第一組和第二組12個值作爲循環中的個別情況?
例如,從第一實例延伸的矢量:
example.data <- c(0.33, 0.12, NA, 0.25, 0.47, 0.83, 0.90, 0.64, NA, NA, 1.00, 0.42, 0.73, NA, 0.56, 0.12, 1.0, 0.47, NA, 0.62, NA, 0.98, NA, 0.05)
凡example.data[1:12]
和example.data[13:24]
分開它們各自的組內繞它們NA
值混洗。
的代碼,我努力工作,這個解決方案爲如下:
shuffle.data = function(input.data,nr,ns){
simdata <- input.data
for(i in 1:nr){
start.row <- (ns*(i-1))+1
end.row <- start.row + actual.length[i] - 1
newdata = sample(input.data[start.row:end.row], size=actual.length[i], replace=F)
simdata[start.row:end.row] <- newdata
}
return(simdata)}
哪裏input.data
是原始輸入數據(example.data
); nr
是組數(2),ns
是每個樣本的大小(12); actual.length
是存儲在向量中的每個組的排除NAs
的長度(對於上述示例,爲actual.length <- c(9, 8)
)。
有人會知道如何去做到這一點?
再次感謝您的幫助!
放入一個數據幀,添加另一列,指示分組(像'C(代表( '一個',12),代表(」 b',12))'),使用'dplyr :: group_by'或'data.table'來操作每組數據。或者與基地'分裂'和'lapply'。只需編寫一個適用於一個組的功能並將其應用於所有組。 – Gregor