R dataframe列乘以sapply

时间:2015-05-27 12:21:17

标签: r dataframe

我需要在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))

如果我将它拆开并忘记功能和保护部分,我可以使它工作,但这会使我的工作复杂化。是否有一些解决方案可以使这项工作?

1 个答案:

答案 0 :(得分:2)

您可以直接在'df'

上使用multip
multip(df, cols)

或者不使用multip

Map('*', df[grep('p', names(df))], df[grep('q', names(df))])

sapply/lapply调用的问题是我们只能访问每个列表元素的一个列,而不是基于函数multip的参数