Как я могу изменить масштаб данных, чтобы каждая строка имела величину 1 в R? - PullRequest
1 голос
/ 13 апреля 2020

Это образец моей матрицы и мой код. Я хочу изменить масштаб моего фрейма данных, чтобы каждая строка имела величину 1. Я новичок в r, и в учебнике инструктор сказал: «разделите каждый элемент строки на величину строки». однако я не уверен, как я могу получить величину строки или изменить масштаб данных. Поэтому я попытался использовать apply () , однако после тестирования моей масштабирования с использованием sqrt (sum (sc_mydata [r,] ^ 2)) я не получил 1, и я получил результат х должен быть 1

#dataframe
myData <- myData[1:12]

#transpose
x <- t(myData)

#rescale the data
sc_mydata = apply(x[-1,], 1, scale)

#test rescale 
for (r in 1:nrow(sc_mydata)) {
  #test rescale if this  is equal to 1 then the rescaling worked 
  x <- sqrt(sum(sc_mydata[r,]^2))

  }


     atr1     atr2     atr3     atr4     atr5     atr6     atr7     atr8     atr9    atr10    atr11    atr12
1 -0.35975 -0.42125 -0.33200 -0.08900 -0.16175 -0.44275 -0.38925  0.02975 -0.68525 -0.27500
2  0.01950 -0.27875 -0.18450 -0.30775 -0.34625  0.00200 -0.12425 -0.29475 -0.35375 -0.09575 -0.39150  0.00225
3  0.08350 -0.23125 -0.28025 -0.28975 -0.37325  0.01525 -0.11725 -0.29775 -0.32325 -0.09500 -0.55850 -0.11700
4  0.02225 -0.23675 -0.22425 -0.33925 -0.37075 -0.00375 -0.18450 -0.29250 -0.38450 -0.00400 -0.38975 -0.13850
5  0.05125 -0.35400 -0.31425 -0.35700 -0.26650 -0.07725 -0.11275 -0.34125 -0.30575  0.00550 -0.57025 -0.20600
6  0.01650 -0.28350 -0.10775 -0.29775 -0.16250 -0.03675 -0.1360

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Мы могли бы сделать это векторизованным способом с rowSums

x/rowSums(x)
1 голос
/ 13 апреля 2020

Если под «величиной строки» ваш инструктор подразумевает «сумму строки», это работает:


sc_mydata <- apply(x, 1, function(x) x / sum(x, na.rm = TRUE))
sc_mydata <- t(sc_mydata)


По какой-то причине функция apply() для строки переносит данные кадр, поэтому мне пришлось перенести его обратно. Я не пользуюсь apply много (предпочитаю инструменты tidyverse основанию R), так что не знаю, почему это происходит.

...