我有一个用于多个变量的值的数据框,并且我想用一个将标记特定数字范围的字符替换所有数字值。我不希望相等的范围,所以据我所知,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"
单次运行任何替换命令,您将看到变量值替换为相应字母的变量。我想要的就是此数据集所有值,所有列中的所有内容。最终目的是让我可以按指定范围创建变量的频率表。
答案 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]))