Как разделить строки на сумму строк и строки, которые соответствуют определенному условию (Сумма строк ›100) в матрице?r

У меня есть матрица, и я пытаюсь добавить столбец в конце с суммами строк, а затем разделить строки на суммы строк, при условии, что сумма строк больше 100. Это то, что у меня есть до сих пор:

row.sums <- rowSums(a)
a <- cbind(a, row.sums)

Это дает мне начальную матрицу, которую я хочу, со столбцом в конце со строкой Sums. Следующий код - это то, что я пытался сделать для второго шага:

a[(a[,dim(a)]>100)] <- dtm/row.sums

Это дает мне сообщение об ошибке, говорящее о том, что размер вектора, который я хочу заменить, не соответствует вектору, которым я хочу его заменить. Что я здесь делаю неправильно? Извините, если это очень простой вопрос, я новичок в R/кодировании в целом.


person Learning_R    schedule 30.09.2015    source источник
comment
Вы получаете ошибку, потому что row.sums содержит суммы для всех строк, но вы пытаетесь присвоить их только меньшему подмножеству матрицы. Так что фильтруйте и при создании row.sums   -  person Christian Borck    schedule 30.09.2015
comment
Привет, Пожалуйста, рассмотрите возможность принятия решения, если оно сработало для вас. Вы также можете узнать больше об этом здесь.   -  person Ronak Shah    schedule 11.12.2018


Ответы (1)


Это может быть немного длинное решение, но оно работает.

df <- cbind(df, rowSums(df))
a <- df[, dim(df)[2]]

for(i in 1:length(a))
{
  if(a[i] > 100)
  {
   df[i, ] <- df[i, ]/a
   }  
 }


#> df
#        [,1]  [,2]      [,3]  [,4]      [,5]  [,6]     [,7]
# x 0.03333333 0.050 0.1000000 0.100 0.1666667 0.375 1.000000
# y 0.06666667 0.075 0.1333333 0.125 0.2000000 0.500 1.333333

Данные

x <- c(100,200,300,400,500)
y <- c(200,300,400, 500, 600)
df <- rbind(x, y)
person Ronak Shah    schedule 30.09.2015
comment
Спасибо! Я выбрал первый ответ, так как он был немного короче, но это тоже сработало! - person Learning_R; 30.09.2015