2017-03-13 9 views
0

基本的に私は毎月の従業員ファイルを作成する関数を作成しました。しかし、私はこれを24ヶ月連続して自動化したいと考えています。Rテキストオートメーション機能

これを自動化する方法はありますか?毎月ファイルを1つの「マスターファイル」に自動的に追加しますか?以下

コード:(3ヶ月....手動でそれをやった)

employee <- function(date1inp) 
{ 
employee <- c('John Doe','Peter Gynn','Jolie Hope') 
salary <- c(21000, 23400, 26800) 
tenure_start_date <- c('2016-01-31','2015-06-30','2015-09-30') 
mis_date <- c(date1inp) 
data <- data.frame(mis_date,tenure_start_date,employee,salary) 
data$tenure <- as.Date(data$mis_date) - as.Date(data$tenure_start_date) 
data$salarynew <- (data$tenure/365) * data$salary 

return(data) 
} 

employee_20161231 <- employee(c("2016-12-31")) 
employee_20170131 <- employee(c("2016-01-31")) 
employee_20170228 <- employee(c("2017-02-28")) 

employee_total <- rbind(employee_20161231,employee_20170131,employee_20170228) 

答えて

0

トリックを行いますseq(暗黙の.Date)、lapply、およびdo.call(rbind, ...)の組み合わせ。あなたのemployee機能を使うと「1sts」の年間実証:「月の最後の日」の年をやっていること

d <- as.Date("2016-01-01") 
seq(d, d + 365, by = "month") 
# [1] "2016-01-01" "2016-02-01" "2016-03-01" "2016-04-01" "2016-05-01" 
# [6] "2016-06-01" "2016-07-01" "2016-08-01" "2016-09-01" "2016-10-01" 
# [11] "2016-11-01" "2016-12-01" 
lst <- lapply(seq(d, d + 365, by = "month"), employee) 
lst[[5]] 
#  mis_date tenure_start_date employee salary tenure  salarynew 
# 1 2016-05-01  2016-01-31 John Doe 21000 91 days 5235.616 days 
# 2 2016-05-01  2015-06-30 Peter Gynn 23400 306 days 19617.534 days 
# 3 2016-05-01  2015-09-30 Jolie Hope 26800 214 days 15712.877 days 
results <- do.call("rbind", lst) 
head(results, n = 7) 
#  mis_date tenure_start_date employee salary tenure  salarynew 
# 1 2016-01-01  2016-01-31 John Doe 21000 -30 days -1726.02740 days 
# 2 2016-01-01  2015-06-30 Peter Gynn 23400 185 days 11860.27397 days 
# 3 2016-01-01  2015-09-30 Jolie Hope 26800 93 days 6828.49315 days 
# 4 2016-02-01  2016-01-31 John Doe 21000 1 days 57.53425 days 
# 5 2016-02-01  2015-06-30 Peter Gynn 23400 216 days 13847.67123 days 
# 6 2016-02-01  2015-09-30 Jolie Hope 26800 124 days 9104.65753 days 
# 7 2016-03-01  2016-01-31 John Doe 21000 30 days 1726.02740 days 

注意sがあなたが好きなこととしてまっすぐフォワードではありません。

d <- as.Date("2016-01-31") 
seq(d, d + 365, by = "month") 
# [1] "2016-01-31" "2016-03-02" "2016-03-31" "2016-05-01" "2016-05-31" 
# [6] "2016-07-01" "2016-07-31" "2016-08-31" "2016-10-01" "2016-10-31" 
# [11] "2016-12-01" "2016-12-31" 

1つのトリックは「月の1日」をとり、1を減算することです:

d <- as.Date("2016-02-01") 
seq(d, d + 365, by = "month") - 1 
# [1] "2016-01-31" "2016-02-29" "2016-03-31" "2016-04-30" "2016-05-31" 
# [6] "2016-06-30" "2016-07-31" "2016-08-31" "2016-09-30" "2016-10-31" 
# [11] "2016-11-30" "2016-12-31"