根据数值范围替换数据框的多个列中的值

时间:2019-03-30 17:44:18

标签: r

我有一个用于多个变量的值的数据框,并且我想用一个将标记特定数字范围的字符替换所有数字值。我不希望相等的范围,所以据我所知,cut()不是一个选择。

在下面的代码中,如果我生成数据帧,然后运行一个或两个替换命令,它们将完全按照我希望它们执行的操作。但是,当我一起运行它们时,最终表将填充所有“ f”值。

#Generate test dataframe

test1<-data.frame(replicate(10,sample(0:1000,100,rep=TRUE)))

#Duplicate dataframe so you can go back and reality check category labels against original data

test<-data.frame(test1)

#These are my replacement commands

  test[test <10] <- "a"
  test[test >=10 & test <25] <- "b"
  test[test >=25 & test <50] <- "c"
  test[test >=50 & test <100] <- "d"
  test[test >=100 & test <500] <- "e"
  test[test >=500] <- "f"

单次运行任何替换命令,您将看到变量值替换为相应字母的变量。我想要的就是此数据集所有值,所有列中的所有内容。最终目的是让我可以按指定范围创建变量的频率表。

1 个答案:

答案 0 :(得分:2)

我们可以使用cut根据指定的breaks创建标签。对于多列,请使用lapply中的base R遍历各列,应用cut并分配回感兴趣的数据集

test[] <- lapply(test, function(x) 
     cut(x, breaks = c(-Inf, 10, 25, 50, 100, 500, Inf), labels = letters[1:6]))