【发布时间】:2019-11-04 14:06:18
【问题描述】:
我正在使用一个函数来更新我的数据帧,第一个参数是我要更新的数据帧,第二个是另一个数据帧,它允许我更新第一个数据帧,第三个参数是一个整数。
我已经使用了 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 或任何其他方法来实现,或者我应该改变我的功能吗?
【问题讨论】: