2016-07-28 49 views
0

从数据框中返回值如果这是一个非常简单或重复的问题,但我似乎无法获得或找到正确的解决方案,我表示歉意。无法根据参数

我只是想从基于输入的函数返回费率。所以如果我的数据帧是:

January 0.02 
    February 0.04 
    March 0.06 
    April 0.08 
     May 0.10 
     June 0.12 
     July 0.14 
    August 0.16 
September 0.18 
    October 0.20 
    November 0.22 
    December 0.24 

我想根据输入返回增长。所以调用monthly_growth(August)应该返回0.16。

我很抱歉,如果这是一个根本性问题,而且非常直截了当,但我似乎无法让它拉 - 在此先感谢。

+0

不看你的函数,如果你有一个看起来像这样的数据框,你将会执行'data.frame [“August”]'来访问名为“August”的值 – TomNash

+0

@TomNash OP可能需要'data.frame [“August',]',假设”August“是一个行名(并且data.frame只有一列)。省略逗号会导致维数/未定义列的错误数量不正确。 – dayne

+0

你应该阅读'?Extract' - 这听起来像你有基本的子集问题。要进行非标准评估,即'August_growth(August)'在'August'周围没有引号,请查看[此问题](http://stackoverflow.com/q/25210455/1623354)。 – dayne

回答

1

简单的例子程序:

mon <- c("January","February","March","April","May","June","July","August","September","October","November","December") 
rate <- c(0.02,0.04,0.06,0.08,0.10,0.12,0.14,0.16,0.18,0.20,0.22,0.24) 

#create the dataframe to use for lookups 
df <- data.frame(mon,rate) 

#custom function - returns the rate for the month passed in. No error checking 
monthly_growth <- function(theMonth){ 
    return(df[df$mon==theMonth,"rate"]) 
} 

#example usage 
monthly_growth("August") 
monthly_growth("October") 
+1

只需要一个FYI,你就可以使用'df < - data.frame(mon = month.name,rate = seq(0.02,0.24,0.02))'来保存一些关键笔画。 – dayne

1

另一种选择,如果你只使用一个月为一输入切换到速度,你可以使用switch功能:

getRate <- function(month) { 
    switch(month, 
     January = 0.02, 
     February = 0.04, 
     March = 0.06, 
     April = 0.08, 
     May = 0.1, 
     June = 0.12, 
     July = 0.14, 
     August = 0.16, 
     September = 0.18, 
     October = 0.2, 
     November = 0.22, 
     December = 0.24, 
     "Invalid month.") 
} 

getRate("August") 
# [1] 0.16 
getRate("hello") 
# [1] "Invalid month." 

只是一个仅供参考,有点让人失望的是,您可以使该函数适用于任意大小写不同的“月”值和月份缩写的任意大写,带或不带引号:

getRate2 <- function(month) { 
    month <- tolower(as.character(substitute(month))) 
    month <- paste0(toupper(substr(month, 1, 1)), 
        substr(month, 2, nchar(month))) 
    if (month %in% month.abb) month <- month.name[match(month, month.abb)] 
    getRate(month) 
}  

getRate2(AUG) 
# [1] 0.16 
getRate2(Aug) 
# [1] 0.16 
getRate2(AugUST) 
# [1] 0.16 
getRate2("aug") 
# [1] 0.16 
+0

谢谢你 - 我很犹豫发布这个问题,但很高兴现在有另一个工具作为结果。 –

+1

@Hatt_haggerty看看编辑。有趣的是使功能更灵活。 – dayne