我有以下内容 df
dat <- data.frame(Cases = c("Student3","Student3","Student3","Student1","Student1",
"Student2","Student2","Student2","Student4"), Class = rep("Math", 9),
Scores = c(9,5,2,7,3,8,5,1,7), stringsAsFactors = F)
> dat
Cases Class Scores
1 Student3 Math 9
2 Student3 Math 5
3 Student3 Math 2
4 Student1 Math 7
5 Student1 Math 3
6 Student2 Math 8
7 Student2 Math 5
8 Student2 Math 1
9 Student4 Math 7
Run Code Online (Sandbox Code Playgroud)
另一方面,我有另一个df,其中包含以下信息:
d <- data.frame(Cases = c("Student3", "Student1",
"Student2", "Student4"), Class = rep("Math", 4), stringsAsFactors = F)
Cases Class
1 Student3 Math
2 Student1 Math
3 Student2 Math
4 Student4 Math
Run Code Online (Sandbox Code Playgroud)
有了这两个,我想scores为每个提取最高student.所以我的输出看起来像这样:
> dat_output
Cases Class Scores
1 Student3 Math 9
2 Student1 Math 7
3 Student2 Math 8
4 Student4 Math 7
Run Code Online (Sandbox Code Playgroud)
我试过merge但它并没有提取最高的scores.
我们可以使用sapply每个Casesin d,子集dat为它Cases并获得max它的分数.
sapply(d$Cases, function(x) max(dat$Scores[dat$Cases %in% x]))
#Student3 Student1 Student2 Student4
# 9 7 8 7
Run Code Online (Sandbox Code Playgroud)
将结果作为data.frame获取
transform(d, Scores = sapply(d$Cases, function(x)
max(dat$Scores[dat$Cases %in% x])))
# Cases Class Scores
# Student3 Math 9
# Student1 Math 7
# Student2 Math 8
# Student4 Math 7
Run Code Online (Sandbox Code Playgroud)
注意 - 我假设你d是
d <- data.frame(Cases = c("Student3", "Student1",
"Student2", "Student4"), Class = rep("Math", 4), stringsAsFactors = F)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |