根据现有数据框列中的连续数据,在新列中添加数据分类

时间:2017-09-13 02:15:20

标签: r dataframe

我想在R数据帧中创建一个新列,从现有列派生它的值,这是一个连续变量。

例如,学生$标记可以包含0-100的数据。如果标记> 90,我有"等级"应该给它A,80到90-B等的列。我想以上述方式对每个10点范围的数据进行分组。如果得分在30到40之间,则得到G.我怎样才能实现这一点。

2 个答案:

答案 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))