我重复了一个实验(rep1和rep2)。对于每个复制品,我有两列(a,sum)和两行属于一起的受试者(AA组,BB ......)。为了分析,我想将收集的数据(a和sum)随机分配给rep1和rep2。 为此,我试图随机选择组并交换" a"和"总和" rep1和rep2。我试图重复随机交换100次,创建100个数据集进行分析。
我遇到unique(df$groups)
来指定每个组的数据属于一起。结合到sample(unique(df$group), 2)
,它会随机抽样,比如2组。但我不知道如何交换这些选定组的重复数据。
以下是数据示例:
group = c("A", "A", "B", "B", "C", "C")
rep1_a = c(2, 8, 5, 5, 4, 6)
rep1_sum = c(10, 10, 10, 10, 10, 10)
rep2_a = c(3, 8, 4, 5, 5, 6)
rep2_sum = c(11, 11, 9, 9, 11, 11)
df = data.frame(group, rep1_a, rep1_sum, rep2_a, rep2_sum)
# group rep1_a rep1_sum rep2_a rep2_sum
1 A 2 10 3 11
2 A 8 10 8 11
3 B 5 10 4 9
4 B 5 10 5 9
5 C 4 10 5 11
6 C 6 10 6 11
这就是它应该是什么样子,如果在这3组中,A组的重复被交换:
group rep1_a rep1_sum rep2_a rep2_sum
1 A 3 11 2 10
2 A 8 11 8 10
3 B 5 10 4 9
4 B 5 10 5 9
5 C 4 10 5 11
6 C 6 10 6 11
答案 0 :(得分:1)
这是使用dplyr执行此操作的一种方法。下面的代码重复创建新的数据集,其中rep1和rep2按组的相同混合,并对数据集进行100次所需的分析。
library(dplyr)
exp_data <- data_frame()
analysis_result <- data_frame()
for (i in 1:100){
# Your new 'experiment' by mixing two real experiment randomly, indicated by 'exp_id'
new_df <- df %>%
group_by(group) %>%
mutate(x = runif(1)) %>%
mutate(repr_a = ifelse(x>0.5,rep1_a,rep2_a), repr_sum = ifelse(x>0.5,rep1_sum,rep2_sum),exp_id=i) %>%
select(exp_id,group,repr_a,repr_sum)
# Your analysis - below is my example
new_analysis <- new_df %>%
group_by(exp_id,group) %>%
summarise(outcome = mean(repr_a*repr_sum))
exp_data <- bind_rows(exp_data,new_df)
analysis_result <- bind_rows(analysis_result,new_analysis)
}
答案 1 :(得分:0)
data.table
版本:
library(data.table)
setDT(df)
df[,swap := sample(c(TRUE,FALSE),1), by=group]
rbind(
df[(!swap)],
df[(swap), setNames(.group,rep2_a,rep2_sum,rep1_a,rep1_sum,swap),names(df)) ]
)[order(group)]
如果swap
变量返回FALSE
,它只是交换列,否则组中的行集将保持不变。