Я надеюсь, что смогу понять мою проблему. По сути, я хочу создать один и тот же набор переменных в нескольких разных наборах данных (они являются подмножествами исходного набора данных, основанного на выбросах, ответах протеста и т. Д. c.). Я перепробовал много вещей, но я полностью в тупике.
Во-первых, я понимаю, что использование eval (parse (противоречит предложениям), однако, я не самый эффективный кодер, и это работало для моих целей. В любом случае, моя цель в основном создать набор переменных - X_3, X_4, X_5 и др. c. Это годовая сумма (x12) набора других переменных - z1_1, z2_1, z3_1 и др. c. Для этого у меня есть следующий код, который работает, когда я ставлю в каждом имени набора данных, где 'data'.
Редактировать: Спецификации данных
#what it looks like now
responseid z3_1 z4_1 z5_1
1 1 4.720 7.08 NA
2 2 1.180 NA 1.18
3 3 1.180 NA 1.18
4 4 2.596 3.54 NA
5 5 15.340 NA NA
6 6 2.360 NA 2.36
#what i'd like it look like:
responseid z3_1 z4_1 z5_1 X_3 X_4 X_5
1 1 4.720 7.08 NA 56.640 84.96 NA
2 2 1.180 NA 1.18 14.160 NA 14.16
3 3 1.180 NA 1.18 14.160 NA 14.16
4 4 2.596 3.54 NA 31.152 42.48 NA
5 5 15.340 NA NA 184.080 NA NA
6 6 2.360 NA 2.36 28.320 NA 28.32
#dput
#original
structure(list(responseid = c(1L, 2L, 3L, 4L, 5L,
6L), z3_1 = c(4.72, 1.18, 1.18, 2.596, 15.34, 2.36), z4_1 = c(7.08,
NA, NA, 3.54, NA, NA), z5_1 = c(NA, 1.18, 1.18, NA, NA, 2.36), class = "data.frame", row.names = c(NA, 6L))
#expected
structure(list(responseid = c(1L, 2L, 3L, 4L, 5L,
6L), z3_1 = c(4.72, 1.18, 1.18, 2.596, 15.34, 2.36), z4_1 = c(7.08,
NA, NA, 3.54, NA, NA), z5_1 = c(NA, 1.18, 1.18, NA, NA, 2.36),
X_3 = c(56.64, 14.16, 14.16, 31.152, 184.08, 28.32), X_4 = c(84.96,
NA, NA, 42.48, NA, NA), X_5 = c(NA, 14.16, 14.16, NA, NA,
28.32)), class = "data.frame", row.names = c(NA, 6L))
Но я хотел бы сделать это для нескольких наборов данных, поэтому я и хочу использовать Функция для запуска каждого df.
for (i in 3:9){
X.varname <- paste0("X_",i)
data <- data %>%
mutate(
!!X.varname := eval(parse(text=paste0("z", i, "_1")))*12
)
}
Однако, когда я пытаюсь поместить это в функцию (чтобы я мог запустить ее через список фреймов данных), ничего не происходит:
f.test <- function(data){
for (i in 3:9){
X.varname <- paste0("X_",i)
data <- data %>%
mutate(
!!X.varname := eval(parse(text=paste0("z", i, "_1")))*12
)
}
}
Кто-нибудь знает, почему это может быть? Это мой первый вопрос о StackOverflow, поэтому я прошу прощения, если какое-либо форматирование является неправильным.