2015-10-08 3 views
2
dput(dat) 
list(structure(c(0, 0, -1, -2, -1, -2, -1, -2, 0, 2, 99, 0, -1, 
-2, -1, -2), .Dim = c(2L, 8L), .Dimnames = list(c("type1", "type2" 
), c("A", "B", "C", "D", "E", "F", 
"G", "H"))), structure(c(1, 2, 1, 2, 1, 2, 1, 2, 
1, 2, 99, 0, 1, 3, 1, 3), .Dim = c(2L, 8L), .Dimnames = list(
    c("type1", "type2"), c("A", "B", "C", 
    "D", "E", "F", "G", "H")))) 

>dat 
[[1]] 
     A B C D E F G H 
type1 0 -1 -1 -1 0 99 -1 -1 
type2 0 -2 -2 -2 2 0 -2 -2 

[[2]] 
     A B C D E F G H 
type1 1 1 1 1 1 99 1 1 
type2 2 2 2 2 2 0 3 3 

Предположим, у меня есть список выше с 2 элементами. Каждый элемент состоит из 2x8 data.frame. ХочуR: добавление предметов в список

1) суммировать значения для type1 для каждого столбца через 2 data.frames (НО лечить 99S как 0)

2), если значение type1 равно 0, сохранить свою соответствующую type2 значение. Если значение type1 не равно 0, установить его значение type2 = 0.

3) суммировать значения type2 для каждого столбца через data.frames

4) подсчета количества type1 значений, которые являются = 0 для каждого столбца и суммировать их (это type1_0 строка)

результат должен выглядеть следующим образом

  A B C D E F G H 
    type1 1 0 0 0 1 0 0 0  
    type2 0 0 0 0 2 0 0 0 
    type1_0 1 0 0 0 1 0 0 0 
+0

Btw, это матрицы, а не кадры данных. –

+0

Как вы получили «A» для типа 1, равным 0. Разве это не должно быть 1? – akrun

+0

@akrun Спасибо за указание, что вне – Adrian

ответ

1

мы выполняем цикл через list (lapply(dat,..), измените вторую строку («тип2») на 0 для всех «type1», которые не являются 0, replace 99 с 0, и суммируют соответствующие элементы с помощью Reduce. Мы извлекаем строку «type1», то есть первую строку с lapply, rbind, конвертируем в логическую матрицу (! - возвращает TRUE для 0 и FALSE для других значений), получите colSums и rbind с «res1».

res1 <- Reduce("+",lapply(dat, function(x) { 
       x[2,][x[1,]!=0] <- 0 
       replace(x, which(x==99), 0)})) 


res2 <- rbind(res1, type1_0= colSums(!do.call(rbind, lapply(dat, `[`, 1,)))) 


res2 
#  A B C D E F G H 
#type1 1 0 0 0 1 0 0 0 
#type2 0 0 0 0 2 0 0 0 
#type1_0 1 0 0 0 1 0 0 0 
Смежные вопросы