Деление оставшегося кадра данных на вектор - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть фрейм данных, который равен 68 x 252. Я пытаюсь найти изменение журнала между каждым вектором относительно первого вектора.т. е. если v1 = 68 и v2, v3, v4 = 70, 71, 72 ... Я хочу, чтобы вывод нового фрейма данных был 0, 0,013,0.019,0.025.

data<-data[3:nrow(data)]/data[2:2]

возвращает

"Ошибка в Ops.data.frame (данные [3: nrow (данные)], данные [2: 2]): '/' определено только для фреймов данных одинакового размера"

Я также пытался создать для каждой своей собственной матрицы

div<-as.vector(data[2:2])
num<-as.matrix(data[3:nrow(data)])
test<-num/div

возвращает:

Ошибка в num / div: несовместимые массивы

или

log(num/div)

1 Ответ

0 голосов
/ 25 февраля 2019

Я думаю, что с data.frames проще работать, чем с матрицами.Мне нравится сохранять каждый этап проблемы в отдельном data.frame, чтобы при необходимости мне было легко проследить шаг, и я могу четко видеть, что было сделано каждым преобразованием.

Если мы начнем с некоторого примераданные (хотя обычно вы читаете это из файла, используя read.csv или что-то подобное):

#get data as a data frame
df <- structure(list(v1 = c(68, 120), v2 = c(70, 121), v3 = c(71, 122), v4 = c(72, 123)), class = "data.frame", row.names = c("row1", "row2"))

df
      v1  v2  v3  v4
row1  68  70  71  72
row2 120 121 122 123

Преобразовать в журнал (base10):

#take log (base 10) of data frame
df_log <- log10(df)

df_log
           v1       v2       v3       v4
row1 1.832509 1.845098 1.851258 1.857332
row2 2.079181 2.082785 2.086360 2.089905

Последний шаг...

df_ans <- df_log[,] - df_log[,1] 

, что означает, что из каждой строки и столбца нашего фрейма данных журнала df_log[,] вычитайте значение из первого столбца df_log[,1] и сохраняйте результаты в df_ans.

Результат:

df_ans
     v1          v2          v3         v4
row1  0 0.012589127 0.018749436 0.02482358
row2  0 0.003604124 0.007178585 0.01072387

Примечание: эта последняя операция должна выполняться с двумя разными фреймами данных df_ans и df_log.Если вы попытаетесь сделать все это на одном и том же data.frame, например, df_log <- df_log[,] - df_log[,1], он не будет работать, так как df_log[,1] будет изменен на 0 в середине операции, а затем вы вычтете 0 из всех ячеек, которыене будет работать очень хорошо!

...