【发布时间】:2015-05-06 22:39:00
【问题描述】:
编辑:这是How to implement coalesce efficiently in R 的骗子,同意。我没有意识到我的问题比我的具体应用更普遍,所以这次讨论很棒。
有时,随机实验中的响应变量包含在每个实验组的不同列中(以下代码中的 Y_1 到 Y_5)。通常最好将响应变量收集到单个列 (Y_all) 中。我最终按照下面的示例进行操作。但我确信有更好的方法。想法?
set.seed(343)
N <- 1000
group <- sample(1:5, N, replace=TRUE)
Y_1 <- ifelse(group==1, rbinom(sum(group==1), 1, .5), NA)
Y_2 <- ifelse(group==2, rbinom(sum(group==2), 1, .5), NA)
Y_3 <- ifelse(group==3, rbinom(sum(group==3), 1, .5), NA)
Y_4 <- ifelse(group==4, rbinom(sum(group==4), 1, .5), NA)
Y_5 <- ifelse(group==5, rbinom(sum(group==5), 1, .5), NA)
## This is the part I want to make more efficient
Y_all <- ifelse(!is.na(Y_1), Y_1,
ifelse(!is.na(Y_2), Y_2,
ifelse(!is.na(Y_3), Y_3,
ifelse(!is.na(Y_4), Y_4,
ifelse(!is.na(Y_5), Y_5,
NA)))))
table(Y_all, Y_1, exclude = NULL)
table(Y_all, Y_2, exclude = NULL)
【问题讨论】:
-
对于这个特定的应用程序,找到第一个非缺失值,SQL命令的名称是
coalesce,有一个很好的答案implementing SQL's coalesce in R。 -
请使用
set.seed -
Gregor,就是这样:我以前从未遇到过
Reduce。 -
对于这种特殊情况,我想我有一个更快的方法:
rowMeans( cbind(Y_1,Y_2,Y_3,Y_4,Y_5), na.rm=TRUE)和rowSums如果可以确保每个“行”最多有 1 个项目,那也可以。
标签: r if-statement