我想在数据集中创建一个新列,其中包含根据学生在考试中的成绩得出的熟练程度。因此,如果学生的成绩在0到10之间,则分配给他们的等级应为A1,如果成绩在11到16之间,则分配的等级应为A2,依此类推。如何在R中编写代码?我试过下面的代码。新列已创建,但仅包含级别A1。因此,该条件无效。有人可以帮我吗?
data$CatEnglishTest=as.factor(ifelse(data$EnglishTestGrade %in%
data$EnglishTestGrade<=10,'A1',
ifelse(data$EnglishTestGrade %in% data$EnglishTestGrade > 10
&& data$EnglishTestGrade < 15,'A2',
as.character(data$EnglishTestGrade))))
答案 0 :(得分:0)
library(dplyr)
data <- data.frame(EnglishTestGrade = c(0, 5, 10, 14, 20))
data <- mutate(data,
CatEnglishTest = case_when(
EnglishTestGrade <= 10 ~ "A1",
EnglishTestGrade < 15 ~ "A2",
TRUE ~ "Undefined category"
))
答案 1 :(得分:0)
说你有学生分数
scores <- data.frame(student=paste("ID",1:10),score = seq(10,100,10))
student score
1 ID 1 10
2 ID 2 20
3 ID 3 30
4 ID 4 40
5 ID 5 50
6 ID 6 60
7 ID 7 70
8 ID 8 80
9 ID 9 90
10 ID 10 100
以及评分等级
scale <- data.frame(score = seq(0,100,25), grade = LETTERS[5:1])
score grade
1 0 E
2 25 D
3 50 C
4 75 B
5 100 A
然后您可以使用此代码为每个学生分配一个成绩
scores$grades <- scale$grade[sapply(scores$score, function(x) tail(which(x >= scale$score),1))]
student score grades
1 ID 1 10 E
2 ID 2 20 E
3 ID 3 30 D
4 ID 4 40 D
5 ID 5 50 C
6 ID 6 60 C
7 ID 7 70 C
8 ID 8 80 B
9 ID 9 90 B
10 ID 10 100 A
答案 2 :(得分:0)
我创建了一个小示例DF。
EnglishTestGrade <- sample(1:20,20)
Student <- LETTERS[1:20]
data <- data.frame(EnglishTestGrade, Student)
str(data)
#> 'data.frame': 20 obs. of 2 variables:
#> $ EnglishTestGrade: int 1 15 19 12 3 14 8 16 2 18 ...
#> $ Student : chr "A" "B" "C" "D" ...
data$CatEnglishTest <- ifelse(data$EnglishTestGrade %in%
data[data$EnglishTestGrade <= 10,]$EnglishTestGrade, 'A1',
ifelse(data$EnglishTestGrade %in%
(data[data$EnglishTestGrade > 10,]$EnglishTestGrade &
data[data$EnglishTestGrade < 15,]$EnglishTestGrade), 'A2',
as.character(data$EnglishTestGrade)
)
)
#> Warning in data[data$EnglishTestGrade > 10, ]$EnglishTestGrade & data[data$EnglishTestGrade < : Länge des längeren Objektes
#> ist kein Vielfaches der Länge des kürzeren Objektes
data
#> EnglishTestGrade Student CatEnglishTest
#> 1 1 A A1
#> 2 15 B 15
#> 3 19 C 19
#> 4 12 D 12
#> 5 3 E A1
#> 6 14 F 14
#> 7 8 G A1
#> 8 16 H 16
#> 9 2 I A1
#> 10 18 J 18
#> 11 9 K A1
#> 12 10 L A1
#> 13 7 M A1
#> 14 4 N A1
#> 15 11 O 11
#> 16 17 P 17
#> 17 20 Q 20
#> 18 13 R 13
#> 19 6 S A1
#> 20 5 T A1