Умножьте строку, соответствующую условию в r - PullRequest
0 голосов
/ 01 октября 2019

У меня есть датафрейм, который состоит из трех столбцов. Страна, валюта и зарплата. пример данных

Меня беспокоит то, что я хочу, чтобы вся зарплата для конкретной страны была в единой валюте. Например, я хочу, чтобы зарплата в Бразилии была в 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 ]

1 голос
/ 01 октября 2019

Скорее всего, если это то, что вам нужно делать регулярно, есть более удобные варианты автоматизации, включая таблицу поиска, о которой упоминал 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))
0 голосов
/ 01 октября 2019

Аналогичная идея с базой 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...