Формула R для нового кадра данных значения столбца на основе другого столбца значения - PullRequest
0 голосов
/ 25 октября 2018

У меня есть этот фрейм данных:

restaurant = c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5)
product = c("small", "medium", "large",
            "small", "medium", "large",
            "small", "medium", "large",
            "small", "medium", "large",
            "small", "medium", "large")
unitssold = c(30,25,59,20,10,50,10,15,20,5,6,12,25,67,100)
id = c(1,5,4,3,2,1,5,6,7,4,3,9,1,5,3)
df <- data.frame(restaurant,product,unitssold,id)

И я хотел бы определить новый столбец с именами SaleKG.Чтобы вычислить это число: - если небольшая часть, чем = unitssold * 5 - если средняя часть, чем = unitssold * 8 - если большая часть, чем = unitssold * 10

Как мне этого достичь?

Ответы [ 2 ]

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

Вот решение с базой R:

df$SaleKG <- df$unitssold * sapply(as.character(df$product), switch, small=5, medium=8, large=10)

и решением с recode из car:

library("car")
df$SaleKG <- df$unitssold * recode(as.character(df$product), "'small'=5; 'medium'=8; 'large'=10")
0 голосов
/ 25 октября 2018

С tidyverse:

df%>%
   mutate(SaleKG=case_when(
     product=="small"~unitssold*5,
     product=="medium"~unitssold*8,
     product=="large"~unitssold*10,
     T~unitssold))
   restaurant product unitssold id SaleKG
1           1   small        30  1    150
2           1  medium        25  5    200
3           1   large        59  4    590
4           2   small        20  3    100
5           2  medium        10  2     80
6           2   large        50  1    500
7           3   small        10  5     50
8           3  medium        15  6    120
9           3   large        20  7    200
10          4   small         5  4     25
11          4  medium         6  3     48
12          4   large        12  9    120
13          5   small        25  1    125
14          5  medium        67  5    536
15          5   large       100  3   1000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...