Синтаксис - R Фреймы данных - PullRequest
       0

Синтаксис - R Фреймы данных

0 голосов
/ 05 декабря 2018

У меня есть фрейм данных df.

30 столбцов, около 1,5 м строк.

Я хочу "нормализовать" столбцы с 13 по 30, разделив каждое число в этих столбцах на среднеедля этого столбца.Я могу сделать это:

df_norm[, 13] <- df[, 13] / Column_Means[1]
df_norm[, 14] <- df[, 14] / Column_Means[2]
df_norm[, 15] <- df[, 15] / Column_Means[3]
...etc...etc...etc..
df_norm[, 29] <- df[, 29] / Column_Means[17]
df_norm[, 30] <- df[, 30] / Column_Means[18]

И это работает, но это неуклюже и немного медленно.Я надеялся сделать все это в одну строку, возможно, что-то вроде:

df_norm[, 13:30] <- df[, 13:30] / Column_Means

или

df_norm[, 13:30] <- df[, 13:30] / Column_Means[1:18]

, но это, похоже, не работает - оно всегда делится на Column_Means [1] вместо того, чтобы просматривать все 18 значений.

Пожалуйста, кто-нибудь может сказать мне, есть ли одна строка кода, которая будет делать то, что мне нужно?Мне нравится писать краткий код, если я могу, но я новичок с синтаксисом R.

Большое спасибо ...

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вот пример, использующий mtcars для фреймов данных, доступных в R. Давайте загрузим его в новый фрейм данных, чтобы мы могли изменить его позже:

df_cars <- mtcars

Теперь предположим, что вы хотите "нормализовать" первые два столбца:

df_cars[ , c(1:2)] <- df_cars[ , c(1:2)]/colMeans(df_cars)[c(1:2)]

Надеюсь, это поможет!

0 голосов
/ 05 декабря 2018

Вы можете использовать apply или lapply и сделать свою функцию внутри

apply(df[,13:30],2, function(x) x/mean(x))
lapply(df[,13:30], function(x) x/mean(x))

Как говорит @Roland, лучше использовать lapply для циклического перебора столбцов data.frame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...