我对R有疑问。
我有以下数据框:
FirstName LastName Exercice1 Exercice2
Eric A 15 12
Eric A 14 14
Eric A 12 15
Paul B 12 14
Paul B 14 14
Joe C 15 12
Joe C 15 17
Joe C 16 17
Joe C 18 19
我想将其更改为以下内容:
FirstName LastName Mark
Exercice1 Exercice2
Eric A 15 12
14 14
12 15
Exercice1 Exercice2
Paul B 12 14
14 14
Exercice1 Exercice2
Joe C 15 12
15 17
16 17
18 19
简而言之,我想为每个学生将每个考试的分数分组为一个数据框的变量。
如果有可能,我有什么想法吗?
答案 0 :(得分:3)
如果你需要的只是Mark列是学生的data.frame,那么你可以使用它:
dat <- read.table(text = "FirstName LastName Exercice1 Exercice2
Eric A 15 12
Eric A 14 14
Eric A 12 15
Paul B 12 14
Paul B 14 14
Joe C 15 12
Joe C 15 17
Joe C 16 17
Joe C 18 19", stringsAsFactors = FALSE, header = TRUE)
dat2 <- dat[!duplicated(dat[,1:2]),1:2]
dat2$Mark <- I(split(dat[,3:4], list(dat$FirstName, dat$LastName), drop = TRUE))
dat2
# FirstName LastName Mark
#1 Eric A c(15, 14....
#4 Paul B c(12, 14....
#6 Joe C c(15, 15....
Mark是一个数据框列表:
> dat2$Mark
$Eric.A
Exercice1 Exercice2
1 15 12
2 14 14
3 12 15
$Paul.B
Exercice1 Exercice2
4 12 14
5 14 14
$Joe.C
Exercice1 Exercice2
6 15 12
7 15 17
8 16 17
9 18 19
现在,为了像您所示的那样进行打印,您需要自定义打印功能,但无论如何您都不需要。或者只是添加空行以获得所需的打印输出。这不是很好,也不像你的输出,但它是一个开始:
dat3 <- dat
dat3[duplicated(dat[,1:2]),1:2] <- ""
print(dat3, row.names = FALSE)
# FirstName LastName Exercice1 Exercice2
# Eric A 15 12
# 14 14
# 12 15
# Paul B 12 14
# 14 14
# Joe C 15 12
# 15 17
# 16 17
# 18 19