Есть много разных способов сделать такие вещи.Например, для роста, веса, например, BMI, вы можете сделать это в основном так же, как в Stata, используя цикл for
:
# For-loop approach
for (col in c("ht", "wgt", "bmi")) {
new_col = paste0(col, "_mean")
df2[, new_col] = mean(df2[, col])
}
Разница в том, что между кодами в коде существует более сильное разделениеи строки в R, поэтому вы задаете имена столбцов в виде строк, используйте paste0
для создания строк, представляющих новые имена столбцов, а затем добавляете их в фрейм данных.
Другой способ сделать это - использовать *Пакет 1008 * и функция mutate_at
, которые будут применять одно и то же преобразование к нескольким столбцам:
library(dplyr)
df2 %>%
mutate_at(c("ht", "wgt", "bmi"),
list(mean = ~ mean(.)))
Синтаксис немного сложен: сначала мы даем имена столбцов, затем следующий аргумент показывает, как мыхочу преобразовать столбцы..
является заполнителем для текущего столбца, ~
означает, что R не будет сразу пытаться вычислить mean(.)
, но будет ждать, пока у нас не появится действительные значения для замены. Когда мы используем список и присваиваем имя преобразованиюкак list(transform = ~ . + 2)
, dplyr
автоматически использует имя в качестве суффикса, поэтому вы получаете имена столбцов, такие как x_transform
, y_transform
и т. д.