[英]Perform same conditional operation on multiple variables
在R中,我經常對多個變量執行條件運算。 例如:
M_foo <- rnorm(25, 0, 1)
M_foo1 <- rnorm(25, 0, 1)
M_bar <- rnorm(25, 0, 1)
M_bar1 <- rnorm(25, 0, 1)
condition <- c(rep(0, 12), rep(1,13))
d <- as.data.frame(cbind(M_foo, M_bar, M_foo1, M_bar1, condition))
d$M_foo_new <- ifelse(
d$condition == 0, d$M_foo1*2, NA
)
d$M_bar_new <- ifelse(
d$condition == 1, d$M_bar1*2, NA
)
如果對具有系統更改名稱的多個變量執行此操作,如何將其壓縮為更緊湊的工作流程? 現在,我經常將代碼復制到MS Word中,然后在其中搜索並更改變量名稱中的各個差異。 可以在R中更優雅地完成此操作嗎?
提前致謝
如果需要重用,功能會更好
f1 <- function(dat, col1, val, col2, multiplier) {
i1 <- dat[[col1]]==val
ifelse(i1, dat[[col2]]*multiplier, NA)
}
f1(d, "condition", 0, "M_foo1", 2)
要創建多個變量,請使用lapply
nm1 <- c("M_foo1", "M_bar1")
d[paste0(nm1, "_new")] <- lapply(nm1, function(colN) f1(d, "condition", 0, col2 = colN, 2))
如果乘數/值不同,則使用Map
d[paste0(nm1, "_new")] <- Map(f1, dat = list(d), "condition", c(0,1), col2 = nm1, 2:3)
嘗試
d[,paste0(names(d[,1:2]),"_new")]=
mapply(function(x,y) {x[d$condition!=y]=NA;x*2}, d[,3:4],unique(d$condition))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.