我正在构建一个包含男性和女性工资的数据表,我从csv文件中检索。代码运行,我得到一个数据表,但工资列和“pensioengrondslag”缺失。 我在下面编写它的方式是这样我可以查看给定年龄的每个性别的工资。 R没有返回错误,我现在已经多次通过我的代码,但我无法弄清楚出了什么问题。
也许别人知道?一些帮助将不胜感激! 这是我的代码:
server.R:
library(prodlim)
library(lubridate)
library(DT)
library(eeptools)
function(input, output) {
insert <- reactive({
# Genereer geboortedata
GeboorteDatum <- sample(seq(as.Date('1900/01/02'), as.Date(input$geboorteData[2]), by = "day"), input$aantalDeelnemers, replace = TRUE)
# Genereer het geslacht
if (input$manVrouwVerhouding == "alleen mannen") {
Geslacht <- sample("M", replace = TRUE, size = input$aantalDeelnemers)
}
if (input$manVrouwVerhouding == "0.9/0.1") {
Geslacht <- sample(c("M","V"), replace = TRUE, size = input$aantalDeelnemers, prob = c(0.9,0.1))
}
if (input$manVrouwVerhouding == "0.8/0.2") {
Geslacht <- sample(c("M","V"), replace = TRUE, size = input$aantalDeelnemers, prob = c(0.8,0.2))
}
if (input$manVrouwVerhouding == "0.7/0.3") {
Geslacht <- sample(c("M","V"), replace = TRUE, size = input$aantalDeelnemers, prob = c(0.7,0.3))
}
if (input$manVrouwVerhouding == "0.6/0.4") {
Geslacht <- sample(c("M","V"), replace = TRUE, size = input$aantalDeelnemers, prob = c(0.6,0.4))
}
if (input$manVrouwVerhouding == "0.5/0.5") {
Geslacht <- sample(c("M","V"), replace = TRUE, size = input$aantalDeelnemers, prob = c(0.5,0.5))
}
if (input$manVrouwVerhouding == "0.4/0.6") {
Geslacht <- sample(c("M","V"), replace = TRUE, size = input$aantalDeelnemers, prob = c(0.4,0.6))
}
if (input$manVrouwVerhouding == "0.3/0.7") {
Geslacht <- sample(c("M","V"), replace = TRUE, size = input$aantalDeelnemers, prob = c(0.3,0.7))
}
if (input$manVrouwVerhouding == "0.2/0.8") {
Geslacht <- sample(c("M","V"), replace = TRUE, size = input$aantalDeelnemers, prob = c(0.2,0.8))
}
if (input$manVrouwVerhouding == "0.1/0.9") {
Geslacht <- sample(c("M","V"), replace = TRUE, size = input$aantalDeelnemers, prob = c(0.1,0.9))
}
if (input$manVrouwVerhouding == "alleen vrouwen") {
Geslacht <- sample("V", replace = TRUE, size = input$aantalDeelnemers)
}
# Bereken leeftijden
vectorDatumBeginDitJaar <- sample(as.Date('2018/01/01'), size = input$aantalDeelnemers, replace = TRUE)
Leeftijd <- as.integer(age_calc(GeboorteDatum, vectorDatumBeginDitJaar, units = "years"))
## Creër salaris
# Lees bestand in
salaris <- read.csv("inkomens.csv", header = TRUE)
leeftijdenBestand <- salaris[, "X...Leeftijd"]
# Bepaal leeftijden waarop pensioen opgebouwd wordt (0-20 en 67-130 niet)
pensioenOpbouwLeeftijden <- function(x){
ouderDanPlft <- match(x, seq(67:130), nomatch = "NA")
a <- c(0,seq(0:19))
nieuw <- match(Leeftijd, a, nomatch = 0)
inverse <- match(nieuw, "0", nomatch = "NA")
salarisLeeftijden <- ouderDanPlft * inverse
salarisLeeftijden
}
# Zoek voor elke leeftijd de index van de bijbehorende salaris
teGebruikenLeeftijd <- pensioenOpbouwLeeftijden(Leeftijd)
zoekIndices <- match(teGebruikenLeeftijd, leeftijdenBestand)
# Bepaal de salaris per leeftijd voor mannen
y <- match(Geslacht, "M")
salarisMannen <- y*zoekIndices
# Bepaal de salaris per leeftijd voor vrouwen
x <- match(Geslacht, "V")
salarisVrouwen <- x*zoekIndices
# Creër schalen (kolom opzoeken)
salarisMannenCategorie1 <- salaris[salarisMannen, 2]
salarisMannenCategorie2 <- salaris[salarisMannen, 3]
salarisMannenCategorie3 <- salaris[salarisMannen, 4]
salarisMannenCategorie4 <- salaris[salarisMannen, 5]
salarisMannenCategorie5 <- salaris[salarisMannen, 6]
salarisVrouwenCategorie1 <- salaris[salarisVrouwen, 7]
salarisVrouwenCategorie2 <- salaris[salarisVrouwen, 8]
salarisVrouwenCategorie3 <- salaris[salarisVrouwen, 9]
salarisVrouwenCategorie4 <- salaris[salarisVrouwen, 10]
salarisVrouwenCategorie5 <- salaris[salarisVrouwen, 11]
# Link input aan salaris schaal
if(input$salarisSchaal == "schaal 1"){
Salaris <- salarisMannenCategorie1 + salarisVrouwenCategorie1
}
if(input$salarisSchaal == "schaal 2"){
Salaris <- salarisMannenCategorie2 + salarisVrouwenCategorie2
}
if(input$salarisSchaal == "schaal 3"){
Salaris <- salarisMannenCategorie3 + salarisVrouwenCategorie3
}
if(input$salarisSchaal == "schaal 4"){
Salaris <- salarisMannenCategorie4 + salarisVrouwenCategorie4
}
if(input$salarisSchaal == "schaal 5"){
Salaris <- salarisMannenCategorie5 + salarisVrouwenCategorie5
}
# Parttime percentage
#Parttime_Percentage <- as.numeric(100, input$aantalDeelnemers)
# Bereken aanspraak
Pensioengrondslag <- (Salaris - input$franchise)
# Creër tabel
data <- data.frame(GeboorteDatum, Leeftijd , Geslacht, Salaris, Pensioengrondslag)
data
})
# render table
output$table <- DT::renderDataTable(DT::datatable({
insert()
}))
}
ui.R:
# Add things to app
fluidPage(
titlePanel("PensioenFonds"),
# Sidebar layout with input and output definitions
sidebarLayout(
sidebarPanel(
numericInput("aantalDeelnemers",
"Aantal deelnemers pensioenfonds: ",
100, min=0),
dateRangeInput("geboorteData",
"Geboortedata van de deelnemers: ", start = '1900/01/02', end = '2018/01/02', format = "dd/mm/yyyy"),
selectInput("manVrouwVerhouding",
"Verhouding Man/Vrouw: ",
choices = c("alleen mannen", "0.9/0.1", "0.8/0.2", "0.7/0.3", "0.6/0.4", "0.5/0.5", "0.4/0.6", "0.3/0.7", "0.2/0.8", "0.1/0.9", "alleen vrouwen")),
selectInput("salarisSchaal",
"Salaris schaal: ",
choices = c("schaal 1", "schaal 2", "schaal 3", "schaal 4", "schaal 5")),
numericInput("franchise",
"Franchise: ",
13344, min=0)
),
# Main panel for displaying outputs
mainPanel(
DT::dataTableOutput("table")
)
)
)
答案 0 :(得分:0)
这是因为最终载体中的&#34; NA&#34; s。使用以下代码将&#34; NA&#34;&n更改为0,修复了我的问题:
na.zero <- function (x) {
x[is.na(x)] <- 0
return(x)
}