我需要在R data.frame中乘以列。我想根据列名中的某些模式执行此操作。这是非常基本的任务,但我努力使它与sapply()或一些相关的功能一起工作。这是我迄今为止所尝试过的。
df <- data.frame("pA" = sample(1:100), "pB" = sample(1:100), "qA" = sample(1:100), "qB" = sample(1:100))
cols <- c("A","B")
multip <- function(df,col){
dfp <- df[which(names(df) %in% paste0("p",col))]
dfq <- df[which(names(df) %in% paste0("q",col))]
dfv <- dfp*dfq
setNames(dfv, paste0("v",col))
}
sapply(df, function(x) multip(x,cols))
如果我将它拆开并忘记功能和保护部分,我可以使它工作,但这会使我的工作复杂化。是否有一些解决方案可以使这项工作?
答案 0 :(得分:2)
您可以直接在'df'
上使用multip
multip(df, cols)
或者不使用multip
Map('*', df[grep('p', names(df))], df[grep('q', names(df))])
sapply/lapply
调用的问题是我们只能访问每个列表元素的一个列,而不是基于函数multip
的参数