首页 > 解决方案 > 创建列,告诉前两列之间的数字来源

问题描述

我有一个包含三列的数据框:

df <- structure(list(lowage = c(45, 15, 9, 51, 22, 45, 4, 4, 9, 25), 
    highage = c(50, 21, 14, 60, 24, 50, 8, 8, 14, 30)), .Names = c("lowage", 
"highage"), row.names = c(NA, 10L), class = "data.frame")

df$random_number <- apply(df, 1, function(x) sample(seq(x[1], x[2]), 1))

我想创建第四列,告诉我们来源的random_number来源。因此,例如,在第一行中,列lowage= 45 和highage= 46。比如说,生成的随机数是 46(例如)。我想创建第四列,它显示为标签“highage”,因为它来自 highage 列。等等...

如果解决方案可以在dplyr,那就太好了!

标签: rif-statementdplyr

解决方案


这是你想要的吗?

df %>% 
  mutate(newcol = 
           case_when(random_number == lowage ~ "lowage", 
                     random_number == highage ~ "highage", 
                     TRUE ~ "between"))

#    lowage highage random_number  newcol
# 1      45      50            47 between
# 2      15      21            18 between
# 3       9      14            13 between
# 4      51      60            57 between
# 5      22      24            23 between
# 6      45      50            49 between
# 7       4       8             4  lowage
# 8       4       8             6 between
# 9       9      14             9  lowage
# 10     25      30            27 between

推荐阅读