Я использую функцию для обновления моего фрейма данных, первый аргумент - это фрейм данных, который я хочу обновить, второй - другой фрейм данных, который позволяет мне обновить первый, а третий аргумент - целое число.
Я уже использовал lapply и другие функции, которые похожи, но в этом случае у меня возникают проблемы с достижением того, что я хочу.
Вот пример моего фрейма данных:
df <- data.frame("Fa" = c("a", "b", "c", "a"),
"P" = c(1, 2, 3, 4), stringsAsFactors = FALSE)
То же самое для другого кадра данных:
df2 <- data.frame("CF" = c("a", "b", "c"),
"R" = c(1, 2, 3),
"ND" = c(1, 2, 3),
"DD" = c(1, 2, 3),
"DF" = c(1, 2, 3),
"NF" = c(1, 2, 3),
"AAA" = c(1, 2, 3),
"BBB" = c(1, 2, 3),
"CCC" = c(1, 2, 3),
"DDD" = c(1, 2, 3),
"EEE" = c(1, 2, 3),
"FFF" = c(1, 2, 3),
"S" = c(1, 2, 3), stringsAsFactors = FALSE)
Используемая мной функция:
my_function <- function(x, y, nb) {
x[which(x$Fam == as.character(y[nb, "CF"])), "PR"] <- x[which(x$Fam == as.character(y[nb, "CF"])), "P"] * (1 - as.double(y[nb, "R"]))
x[which(x$Fa == as.character(y[nb, "CF"])), "R"] <- y[nb, "R"]
x[which(x$Fa == as.character(y[nb, "CF"])), "ND"] <- y[nb, "ND"]
x[which(x$Fa == as.character(y[nb, "CF"])), "DD"] <- y[nb, "DD"]
x[which(x$Fa == as.character(y[nb, "CF"])), "DF"] <- y[nb, "DF"]
x[which(x$Fa == as.character(y[nb, "CF"])), "NF"] <- y[nb, "NF"]
x[which(x$Fa == as.character(y[nb, "CF"])), "S"] <- y[nb, "S"]
return (x)
}
Пример, чтобы увидеть, как используется функция:
df <- my_function(df, df2, 1)
df <- my_function(df, df2, 2)
df <- my_function(df, df2, 3)
По сути, моя цель - избежать многократного вызова моей функции, поэтому более понятно, почему я сделал это 3 раза, потому что в моем фрейме данных "df2" у меня есть 3 строки. Поэтому я хотел знать, можно ли этого достичь, используя lapply или любой другой метод, или я должен изменить свою функцию?