【发布时间】:2019-05-29 19:01:22
【问题描述】:
我有工资数据,其中大约 95% 是按小时计算的,但其中一些是按年薪计算的。所以我做了一个函数将年薪转换为每小时,但是运行需要 1 分 40 秒,当我的数据集是 43000 行 x 12 列(我认为不会太大)所以我认为不需要这么长。
我很好奇是否有比我创建的当前函数更好的方法来做到这一点。我是 dplyr 和 tidyverse 的新手,因此理想情况下是使用这些功能的答案。
这里是一些示例数据:
NOC4 Region Region_Name Wage_2012 Wage_2013 Wage_2014
0011 ER10 National 28.1 65000 NA
0011 ER1010 Northern NA 30.5 18
0011 ER1020 Southern 42.3 72000 22
0011 ER1030 Eastern 12 NA 45500
0011 ER1040 Western 8 NA 99000
0011 ER10 National NA 65000 NA
这是函数后的样子:
NOC4 Region Region_Name Wage_2012 Wage_2013 Wage_2014
0011 ER10 National 28.1 33.33 NA
0011 ER1010 Northern NA 30.5 18
0011 ER1020 Southern 42.3 36.92 22
0011 ER1030 Eastern 12 NA 23.33
0011 ER1040 Western 8 NA 50.77
0011 ER10 National NA 33.33 NA
函数如下:
year_to_hour <- function(dataset, salary, startcol){
# where "startcol" should be the first column containing the numeric
# values that you are trying to convert.
for(i in startcol:ncol(dataset)){
for(j in 1:nrow(dataset)){
if(is.na(dataset[j, i])){
j = j+1
}else if(as.numeric(dataset[j, i]) >= as.numeric(salary)){
dataset[j, i] = dataset[j, i]/1950
}
else{
dataset[j, i] = dataset[j, i]
}
}
}
return(as_tibble(dataset))
}
converted <- year_to_hour(wage_data_messy, 1000, 4)
【问题讨论】:
-
第一个
if,对于NA值,意味着什么?它似乎对输出没有影响。 -
老实说,我只是在某一时刻不断收到错误,这让其中一些错误消失了。我相信你是对的,但它是没用的。
标签: r performance function