2015-05-27 4 views
1

Мне нужно умножить столбцы в R data.frame. Я хочу сделать это на основе определенных шаблонов в именах столбцов. Это очень элементарная задача, но я изо всех сил стараюсь заставить ее работать с sapply() или некоторой связанной функцией. Это то, что я пробовал до сих пор.R умножение столбцов данных с помощью 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

Используя 'df' на' sapply'/lapply', вы получают только один столбец для элемента списка – akrun

ответ

2

Вы можете использовать multip непосредственно на «ДФ»

multip(df, cols) 

или без использования multip

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

Проблема с sapply/lapply вызовом является то, что мы получаем доступ только один столбец для каждого элемента списка и это не аргументы, основанные на функции multip

Смежные вопросы