我想在R数据帧中创建一个新列,从现有列派生它的值,这是一个连续变量。
例如,学生$标记可以包含0-100的数据。如果标记> 90,我有"等级"应该给它A,80到90-B等的列。我想以上述方式对每个10点范围的数据进行分组。如果得分在30到40之间,则得到G.我怎样才能实现这一点。
答案 0 :(得分:3)
您可以使用?cut
功能。您可以指定数字输入向量,标识断点,并为组指定标签。 right
参数告诉cut
函数指定区间是否包含左侧和右侧。例如:
set.seed(1)
student = data.frame(marks=runif(20,0,100)) #random grades
student$grade = cut(student$marks, breaks=seq(0,100,10), labels=LETTERS[10:1], right=F)
head(student)
marks grade
1 26.55087 H
2 37.21239 G
3 57.28534 E
4 90.82078 A
5 20.16819 H
6 89.83897 B
虽然,如果你真的想要> 90,我认为你需要一个稍微杂乱的版本:
student$grade = cut(student$marks, breaks=c(seq(0, 90, 10), Inf), labels=LETTERS[10:1], right=F)
答案 1 :(得分:2)
我们可以使用cut
函数
student$grade <- cut(student$marks, seq(30, 100, 10),
labels = rev(c("A", "B", "C", "D", "E", "F", "G")))
或者我们可以使用case_when
包中的dplyr
。
library(dplyr)
student <- student %>%
mutate(grade = case_when(
marks > 90 ~ "A",
marks > 80 ~ "B",
marks > 70 ~ "C",
marks > 60 ~ "D",
marks > 50 ~ "E",
marks > 40 ~ "F",
marks > 30 ~ "G"
))
示例数据
student <- data.frame(marks = c(100, 85, 32, 77, 64, 50, 44, 93))