кратны, если условия в г - PullRequest
       2

кратны, если условия в г

0 голосов
/ 05 октября 2018

Я работал над этой проблемой, но не смог ее решить.Я знаю, что ответ может быть очень простым, но я не мог решить его и не мог найти, как решить его из других подобных вопросов.

У меня есть следующий data.frame:

region    group   probs1   probs2   probs3   probs4     weights
   1        2       0.2       0.3     0.4       0.1        NA
   2        4       0.3       0.4     0.15      0.15       NA
   3        3       0.4       0.1     0.3       0.2        NA
   4        1       0.7       0.1     0.1       0.1        NA
   5        1       0.2       0.3     0.4       0.1        NA
   6        2       0.6       0.1     0.1       0.2        NA
   7        3       0.7       0.1     0.1       0.1        NA
   8        4       0.3       0.2     0.1       0.4        NA
   9        3       0.2       0.1     0.1       0.6        NA
  10        1       0.1       0.2     0.1       0.6        NA

Что я собираюсь сделать, это создать новый столбец в data.frame под названием «weights», который рассчитывается так, как если быгруппа == 1, тогда вес = = probs1 / probs1.Если группа == 2, то веса = probs1 / probs2.Если группа == 3, то веса = probs1 / probs3.Если группа == 4, то веса = probs1 / probs4.

Я использовал разные типы кодов, например, ifelse, if....else, dplyr, но мне не удалось.Фактически, коды могут создавать только веса для весов = probs1 / probs1 и применять их для всех регионов, независимо от группы.

Может кто-нибудь, пожалуйста, помогите мне решить это?Спасибо

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Вы можете попробовать dplyr пакет, чтобы решить эту проблему, хотя это возможно и без этого.

library(dplyr)

data_frame <- data_frame %>%
  mutate(
    weights = ifelse(group==1,probs1/probs1,
              ifelse(group==2,probs1/probs2,
              ifelse(group==3,probs1/probs3,
              ifelse(group==4,probs1/probs4,NA))))
  )

print(data_frame)
0 голосов
/ 05 октября 2018

Вы можете использовать dplyr::case_when

library(dplyr)
df %>%
    mutate(weights = case_when(
        group == 1 ~ probs1 / probs1,
        group == 2 ~ probs1 / probs2,
        group == 3 ~ probs1 / probs3,
        TRUE ~ probs1 / probs4))
#   region group probs1 probs2 probs3 probs4   weights
#1       1     2    0.2    0.3   0.40   0.10 0.6666667
#2       2     4    0.3    0.4   0.15   0.15 2.0000000
#3       3     3    0.4    0.1   0.30   0.20 1.3333333
#4       4     1    0.7    0.1   0.10   0.10 1.0000000
#5       5     1    0.2    0.3   0.40   0.10 1.0000000
#6       6     2    0.6    0.1   0.10   0.20 6.0000000
#7       7     3    0.7    0.1   0.10   0.10 7.0000000
#8       8     4    0.3    0.2   0.10   0.40 0.7500000
#9       9     3    0.2    0.1   0.10   0.60 2.0000000
#10     10     1    0.1    0.2   0.10   0.60 1.0000000

Пример данных

df <- read.table(text =
    "region    group   probs1   probs2   probs3   probs4     weights
   1        2       0.2       0.3     0.4       0.1        NA
   2        4       0.3       0.4     0.15      0.15       NA
   3        3       0.4       0.1     0.3       0.2        NA
   4        1       0.7       0.1     0.1       0.1        NA
   5        1       0.2       0.3     0.4       0.1        NA
   6        2       0.6       0.1     0.1       0.2        NA
   7        3       0.7       0.1     0.1       0.1        NA
   8        4       0.3       0.2     0.1       0.4        NA
   9        3       0.2       0.1     0.1       0.6        NA
  10        1       0.1       0.2     0.1       0.6        NA", header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...