clodagh
1
Hi, there. This is my issue.
I want to input a random number by a group.
For instance,
if alc == grp1, then a value of a new variable, named 'alc_annual' , has to be random number between 24 and 36.
R code >
tmp <- tmp %>%
mutate(annual_alc = case_when(alc == 1 ~ 0 ,
alc == 2 ~ 0 ,
alc == 4 ~ 12,
alc == 5 ~ runif(6876,24,36)[i],
alc == 6 ~ runif(6876,48,56)[i],
alc == 7 ~ runif(6876,104,156)[i],
alc == 8 ~ runif(6876,330,366)[],
TRUE ~ annual_alc))
But the problem is that when I run the above code, the whole data which 'alc==4' are input a same number.
I just need to make a different random number although they are in the same group.
I'll waiting for some advices and thanks for your considering.
Hi, maybe something like this?
# test dataset
tmp <- tibble(alc = sample(seq(1:10), 6876, replace = TRUE),
annual_alc = sample(seq(20:100), 6876, replace = TRUE)) %>%
mutate(rand5 = runif(6876,24,36),
rand6 = runif(6876,48,56),
rand7 = runif(6876,104,156),
rand8 = runif(6876,330,366))
# output
tmp %>%
mutate(annual_alc = case_when(alc == 1 ~ 0 ,
alc == 2 ~ 0 ,
alc == 4 ~ 12,
alc == 5 ~ rand5,
alc == 6 ~ rand6,
alc == 7 ~ rand7,
alc == 8 ~ rand8,
TRUE ~ as.numeric(annual_alc))) %>%
select(-(rand5:rand8))
# A tibble: 6,876 x 2
alc annual_alc
<int> <dbl>
1 2 0
2 1 0
3 6 49.7
4 5 34.9
5 2 0
6 2 0
7 9 38
8 4 12
9 5 27.7
10 5 29.1
# ... with 6,866 more rows
if you use group_by(row_number) runif will run for each row individually:
require(dplyr)
a <- mtcars %>%
group_by(row_number()) %>%
mutate(rand_num = case_when(cyl == 4 ~ runif(1,24,36),
cyl == 6 ~ runif(1,48,56),
cyl == 8 ~ runif(1,330,366),
TRUE ~ 1))
2 Likes
clodagh
4
Oh, Thanks!
I now solve the problem.
1 Like
clodagh
5
Thanks for your consideration.!!

system
Closed
6
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.
If you have a query related to it or one of the replies, start a new topic and refer back with a link.