У меня есть набор данных, который выглядит как смоделированный ниже. Набор данных представляет три элемента вопросника. Один из трех пунктов должен быть повторно закодирован, и затем я хотел бы вычислить среднее значение перекодированного и двух оригинальных элементов. Я мог бы все это сделать вручную, но это довольно утомительно, поэтому я ищу хорошее решение для l oop.
# Simulate dataset #
id <- 1:100
EC01_01 <- sample(x = 1:7, size = 100, replace = T)
EC02_01 <- sample(x = 1:7, size = 100, replace = T)
EC03_01 <- sample(x = 1:7, size = 100, replace = T)
EC04_01 <- sample(x = 1:7, size = 100, replace = T)
EC05_01 <- sample(x = 1:7, size = 100, replace = T)
EC06_01 <- sample(x = 1:7, size = 100, replace = T)
EC07_01 <- sample(x = 1:7, size = 100, replace = T)
EC08_01 <- sample(x = 1:7, size = 100, replace = T)
EC09_01 <- sample(x = 1:7, size = 100, replace = T)
EC10_01 <- sample(x = 1:7, size = 100, replace = T)
EC01_02 <- sample(x = 1:7, size = 100, replace = T)
EC02_02 <- sample(x = 1:7, size = 100, replace = T)
EC03_02 <- sample(x = 1:7, size = 100, replace = T)
EC04_02 <- sample(x = 1:7, size = 100, replace = T)
EC05_02 <- sample(x = 1:7, size = 100, replace = T)
EC06_02 <- sample(x = 1:7, size = 100, replace = T)
EC07_02 <- sample(x = 1:7, size = 100, replace = T)
EC08_02 <- sample(x = 1:7, size = 100, replace = T)
EC09_02 <- sample(x = 1:7, size = 100, replace = T)
EC10_02 <- sample(x = 1:7, size = 100, replace = T)
EC01_03 <- sample(x = 1:7, size = 100, replace = T)
EC02_03 <- sample(x = 1:7, size = 100, replace = T)
EC03_03 <- sample(x = 1:7, size = 100, replace = T)
EC04_03 <- sample(x = 1:7, size = 100, replace = T)
EC05_03 <- sample(x = 1:7, size = 100, replace = T)
EC06_03 <- sample(x = 1:7, size = 100, replace = T)
EC07_03 <- sample(x = 1:7, size = 100, replace = T)
EC08_03 <- sample(x = 1:7, size = 100, replace = T)
EC09_03 <- sample(x = 1:7, size = 100, replace = T)
EC10_03 <- sample(x = 1:7, size = 100, replace = T)
ds <- data.frame(id,
EC01_01, EC02_01, EC03_01, EC04_01, EC05_01,
EC06_01, EC07_01, EC08_01, EC09_01, EC10_01,
EC01_02, EC02_02, EC03_02, EC04_02, EC05_02,
EC06_02, EC07_02, EC08_02, EC09_02, EC10_02,
EC01_03, EC02_03, EC03_03, EC04_03, EC05_03,
EC06_03, EC07_03, EC08_03, EC09_03, EC10_03)
У меня есть вопрос, есть ли хороший способ написать для l oop для первого перекодирования переменных на основе частей их имен столбцов. Например, я хочу перекодировать все столбцы, которые называются EC01_01-EC10_01, но только те, которые называются ECxx_01. Я мог бы сделать это вручную, как описано ниже, но я бы предпочел решение al oop.
# Recode ECxx_01
ds$EC01_01r <- 8 - ds$EC01_01
ds$EC02_01r <- 8 - ds$EC02_01
ds$EC03_01r <- 8 - ds$EC03_01
ds$EC04_01r <- 8 - ds$EC04_01
ds$EC05_01r <- 8 - ds$EC05_01
ds$EC06_01r <- 8 - ds$EC06_01
ds$EC07_01r <- 8 - ds$EC07_01
ds$EC08_01r <- 8 - ds$EC08_01
ds$EC09_01r <- 8 - ds$EC09_01
ds$EC10_01r <- 8 - ds$EC10_01
После перекодирования я хотел бы вычислить средние значения строки (например, EC01r_01, EC01_02, EC01_03). Опять же, я мог бы сделать это вручную, как указано ниже, но я бы предпочел решение al oop.
# Compute means
ds$EC01.mean <- rowMeans(ds[c("EC01_01r", "EC01_02", "EC01_03")], na.rm = T)
ds$EC02.mean <- rowMeans(ds[c("EC02_01r", "EC02_02", "EC02_03")], na.rm = T)
ds$EC03.mean <- rowMeans(ds[c("EC03_01r", "EC03_02", "EC03_03")], na.rm = T)
ds$EC04.mean <- rowMeans(ds[c("EC04_01r", "EC04_02", "EC04_03")], na.rm = T)
ds$EC05.mean <- rowMeans(ds[c("EC05_01r", "EC05_02", "EC05_03")], na.rm = T)
ds$EC06.mean <- rowMeans(ds[c("EC06_01r", "EC06_02", "EC06_03")], na.rm = T)
ds$EC07.mean <- rowMeans(ds[c("EC07_01r", "EC07_02", "EC07_03")], na.rm = T)
ds$EC08.mean <- rowMeans(ds[c("EC08_01r", "EC08_02", "EC08_03")], na.rm = T)
ds$EC09.mean <- rowMeans(ds[c("EC09_01r", "EC09_02", "EC09_03")], na.rm = T)
ds$EC10.mean <- rowMeans(ds[c("EC10_01r", "EC10_02", "EC10_03")], na.rm = T)
Любая помощь / подсказка очень ценится.
Дэвид