Create a column of random integers, where the min and max integer for each row come from adjacent columns

本秂侑毒 提交于 2021-01-28 18:34:02

问题


I have a data frame:

letter <- c("A", "B", "C")
min <- c(1, 2, 3)
max <- c(4, 5, 6)
df <- data.frame(letter, min, max)

I want to add a 4th column to df which generates a random number for each row, where the lower and upper limits from which the random integers are sampled from are the min and max values of that row, respectively.

I have an inkling that I should use sample(), but when I do it returns a column of values drawn randomly from the referenced column:

df$random <- sample(df$max)

Could I also use runif?


回答1:


Assuming your dataframe df as

   letter min max
1      A   1   4
2      B   2   5
3      C   3   6

I have a feeling there should be a better base R solution than this. However, for now we can try with apply and select (sample) any random number between the two columns.

df$third_column <- apply(df, 1, function(x) sample(x[2]:x[3], 1))
df

#  letter min max third_column
#1      A   1   4            1
#2      B   2   5            4
#3      C   3   6            4



回答2:


You can go the dplyr way:

df %<>% rowwise() %>% dplyr::mutate(x = sample(min:max, 1))



来源:https://stackoverflow.com/questions/40533561/create-a-column-of-random-integers-where-the-min-and-max-integer-for-each-row-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!