【发布时间】:2018-07-02 23:21:28
【问题描述】:
我试图弄清楚如何添加从一个函数返回的多个列,该函数从同一数据帧中获取一个或多个列作为输入 - 基本上,我想要变异,但可以选择 left_join() 一个数据帧。我可以使用 left_join() 或 cbind() 来做到这一点,但必须有更好的方法。
我使用的实际代码是获取收入、成本、资本支出和其他信息的列,并计算税收和其他财政政策输出。因为它们是相互依赖的,所以我需要在一个函数中完成这一切(我不能一次只做一个变量)而且我真的不想多次调用同一个函数然后按列进行变异(尽管我可以也这样做)。
这是我想做的一个非常简单的例子(人为的):
library(tidyverse)
library(lubridate)
library(nycflights13)
#small data frame of new years day flights from JFK
df1<-flights %>% filter(year==2013,month==1,day==1,origin=="JFK")
#test function
arr_gate_time<-function(time){
dep<-time
gate<-time-hours(1)
check_in<-time-hours(2)
data.frame(gate,check_in)
}
我想要做的是,在 mutate 中,做这样的事情:
df_test_2<- df1 %>% mutate(SOMETHING=arr_gate_time(dep_time))
但是,我能得到的最接近的是
df_test<-arr_gate_time(df1$time_hour)
df_test_2<-cbind(df1,df_test)
我确信有一个简单的 dplyr 实现可以做到这一点,但我不知道正确的命令结构。
谢谢!
【问题讨论】:
-
SOMETHING我认为你的意思更像sk-learn/pandas风格的SOMETHING1, SOMETHING2 =对吧? -
是的,或者一些类似的语法 - 我希望它将两列附加到数据框中。
-
df_test_2 <- df1 %>% cbind(arr_gate_time(.$time_hour))怎么样?变异更好吗? -
@Ryan,可能就是这么简单!我不知道我可以跨管道绑定。
-
你可以通过管道进入任何函数!