我写了一个简单的代码来向我的数据集 WM_Purchased_1 添加两列(A_Purchase_Freq 和 T_A_Expenditure):
WM_Purchased_1 <- WM_Purchased_1 %>%
mutate(A_Purchase_Freq =
ifelse(utfoodb=="Daily", tfoodb*30*mfoodbly,
ifelse(utfoodb=="Weekly", tfoodb*4*mfoodbly,
ifelse(utfoodb=="Monthly", tfoodb*1*mfoodbly,
ifelse(utfoodb=="Quarterly", tfoodb*4,
ifelse(utfoodb=="Bi-Annually", tfoodb*2,
ifelse(utfoodb=="Annually", tfoodb*1, "NA"))))))) %>%
mutate(A_Purchase_Freq= as.numeric(A_Purchase_Freq)) %>%
mutate(T_A_Expenditure = A_Purchase_Freq * cfoodb)
我现在想将相同的函数应用于另外 3 个数据集(
WM_Purchased_2
、WM_Purchased_3
、WM_Purchased_4
)。
到目前为止,我已经创建了函数 f1:
f1 <- function(dat) {
dat<- dat %>%
mutate(A_Purchase_Freq =
ifelse(utfoodb=="Daily", tfoodb*30*mfoodbly,
ifelse(utfoodb=="Weekly", tfoodb*4*mfoodbly,
ifelse(utfoodb=="Monthly", tfoodb*1*mfoodbly,
ifelse(utfoodb=="Quarterly", tfoodb*4,
ifelse(utfoodb=="Bi-Annually", tfoodb*2,
ifelse(utfoodb=="Annually", tfoodb*1, "NA"))))))) %>%
mutate(A_Purchase_Freq= as.numeric(A_Purchase_Freq)) %>%
mutate(T_A_Expenditure = A_Purchase_Freq * cfoodb)
}
然后我使用
list()
创建了我的数据框列表,并尝试将我的函数应用于列表使用 lapply
:
dflist<- list(WM_Purchased_2, WM_Purchased_3, WM_Purchased_4)
lapply(dflist, f1)
但我一辈子都想不出如何将列添加到 original 数据框,而不是仅仅在控制台或列表中返回数据。
任何帮助将不胜感激! (对不起,我不能分享数据集)
编辑: 这是一个可重现的例子:
m1 <- as.data.frame(matrix(1:12, 3, 4, dimnames=list(LETTERS[1:3], LETTERS[1:4])))
m2 <- as.data.frame(matrix(4:15, 3, 4, dimnames=list(LETTERS[1:3], LETTERS[1:4])))
listdf<- list(m1, m2)
f1 <- function(dat) {
dat<- dat %>%
mutate(E = C* D)
}
lapply(listdf, f1)
简而言之,我希望将 E 列添加到数据框 m1 和 m2,而不是在控制台中返回。
你只需要在你的函数声明中返回数据:
f1 <- function(dat) {
dat<- dat %>%
mutate(A_Purchase_Freq =
ifelse(utfoodb=="Daily", tfoodb*30*mfoodbly,
ifelse(utfoodb=="Weekly", tfoodb*4*mfoodbly,
ifelse(utfoodb=="Monthly", tfoodb*1*mfoodbly,
ifelse(utfoodb=="Quarterly", tfoodb*4,
ifelse(utfoodb=="Bi-Annually", tfoodb*2,
ifelse(utfoodb=="Annually", tfoodb*1, "NA"))))))) %>%
mutate(A_Purchase_Freq= as.numeric(A_Purchase_Freq)) %>%
mutate(T_A_Expenditure = A_Purchase_Freq * cfoodb)
dat
}
或删除作业:
f1 <- function(dat) {
dat %>%
mutate(A_Purchase_Freq =
ifelse(utfoodb=="Daily", tfoodb*30*mfoodbly,
ifelse(utfoodb=="Weekly", tfoodb*4*mfoodbly,
ifelse(utfoodb=="Monthly", tfoodb*1*mfoodbly,
ifelse(utfoodb=="Quarterly", tfoodb*4,
ifelse(utfoodb=="Bi-Annually", tfoodb*2,
ifelse(utfoodb=="Annually", tfoodb*1, "NA"))))))) %>%
mutate(A_Purchase_Freq= as.numeric(A_Purchase_Freq)) %>%
mutate(T_A_Expenditure = A_Purchase_Freq * cfoodb)
}
附加
要存储
lapply()
的结果,您只需将返回值分配给任何新的或现有的变量。例如:
dflist <- lapply(dflist, f1)
lapply()
的结果不会输出到控制台,而是存储在提供的变量中。