簡體   English   中英

對多個變量執行相同的條件運算

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM