2017-01-10 3 views
0

Дорогое сообщество переполнения стека,Как суммировать столбцы на основе метки столбца (содержащего типичный символ)?

Я новичок на форуме, вот мой первый пост.

Моя проблема это следующим образом:

Я хотел бы подвести, в строке, по столбцам, содержит ли метка столбца типичный характер (в моем случае, либо содержит «полный» или «неполными») и сообщите эти суммы в соответствующих столбцах «sum_complete» и «sum_incomplete».

set.seed(1) 
incomplete_x=1:10 
incomplete_y=rnorm(10) 
complete_x=runif(10) 
complete_y=3:12 
dt=cbind(incomplete_x,incomplete_y,complete_x,complete_y) 

Я хотел бы иметь dt[,5] и dt[,6], содержащие соответственно:

0,3735462 2,1836433 2,1643714 5,5952808 5,3295078 5,1795316 7,4874291 8,7383247 9,5757814 9,6946116

3,934705 4,212143 5,651674 6,125555 7,267221 8,386114 9,013390 10,382388 11,869691 12,340349

Я делаю что-то вроде (извините, не хорошо при кодировании ...):

for (i in 1:ncol(dt)) { 
    if (grepl("incomplete",colnames(dt)[i])==TRUE) { 
    dt[,"sum_incomplete"] <- rowSums(dt) 
    } else { 
    dt[,"sum_complete"] <- rowSums(dt) 
    } 
} 

Но код не работает.

Не могли бы вы помочь с этим кодом, пожалуйста? Заранее благодарю вас за помощь!

Энтони

ответ

0

вы идете в правильном направлении, используя grep, но петля for не требуется

dt <- cbind(dt, rowSums(dt[, grep("^incomplete", colnames(dt))])) 
dt <- cbind(dt, rowSums(dt[, grep("^complete", colnames(dt))])) 

colnames(dt)[5:6] <- c("sum_incomplete", "sum_complete") 

как примечание стороны, это, вероятно, лучше не использовать dt для обозначения матрицы, как это имя функции и может быть аббревиатурой для другой библиотеки.

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