将与r

时间:2019-10-01 12:23:51

标签: r dataframe conditional-statements

我有一个由三列组成的数据框。国家,货币和工资。 the sample data

我在这里的担心是,我希望特定国家/地区的所有薪水都使用单一货币。例如,我希望巴西的工资以BSD为单位。因此,无论货币在哪里都不同,这里就是INR,我想将其乘以6.789之类的转换率。同样,我也想为其他国家/地区做。我已经使用if语句编写了一段代码。但是我的薪水列乘以转换率并没有。

if (df$Country == "Brazil"){
  if(df$Currency == "INR"){
    df$Salary <- df$Salary*2.50
  }
}else if(df$Country == "India"){
  if(df$Currency == "USD"){
    df$Salary <- df$Salary*6.789
  }else if (df$Currency == "CHF"){
    df$Salary <-df$Salary*5.67
  }
}else {
  df$Salary <- df$Salary*1
}

我仍然得到与最初工资相同的工资。还有其他方法可以解决吗?

2 个答案:

答案 0 :(得分:1)

就像这是您需要定期执行的操作一样,还有更好的自动化选项,包括Tumbledown提到的查找表。

如果无法使用其他方法,并且您仍然需要运行一些条件语句,则可以使用tidyverse来使用mutate和case_when来获得更简洁,更易读的解决方案。

library(dplyr)
df <- df %>%
        mutate(Salary = case_when(Country == "Brazil" & Curency == "INR" ~ Salary * 2.5,
                          Country == "India" & Currency == "USD" ~ Salary * 6.789,
                          Country == "India" & Currency == "CHF" ~ Salary * 5.67,
                          TRUE ~ Salary))

答案 1 :(得分:0)

与基数R类似的想法:

country <- c(rep("Brazil", 7), rep("India", 7))
currency <- c(rep("BSD", 4), rep("INR", 5), rep("USD", 3), rep("CHF", 2))
salary <- c(70000, 45000, 13425, 67746, 87852, 18902, 56148,
  81871, 98767, 23456, 45688, 98287, 62290, 23623)
dd <- data.frame(country, currency, salary)
conversion <- NULL
conversion$INR2BSD <- 6.789
conversion$INR2CHF <- 4.5
conversion$USD2CHF <- 5
conversion <- data.frame(conversion)
dd$convrate <- 1
dd$convrate[dd$country == "Brazil" & dd$currency == "INR"] <- conversion$INR2BSD
dd$convrate[dd$country == "India" & dd$currency == "INR"] <- conversion$INR2CHF
dd$convrate[dd$country == "India" & dd$currency == "USD"] <- conversion$USD2CHF

dd$conv_salary <- dd$salary * dd$convrate