将函数应用于多个数据框

问题描述 投票:0回答:1

我写了一个简单的代码来向我的数据集 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,而不是在控制台中返回。

r dplyr purrr mutate
1个回答
1
投票

你只需要在你的函数声明中返回数据:

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()
的结果不会输出到控制台,而是存储在提供的变量中。

© www.soinside.com 2019 - 2024. All rights reserved.