将数据框变量重塑为列表
Reshape Data frame variables into list
我对 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
简而言之,我想将每个学生每次测试的分数分组到一个数据框变量中。
如果可能的话,你有什么想法吗?我应该怎么做?
如果您只需要标记栏成为学生的 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....
标记是数据帧列表:
> 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
我对 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
简而言之,我想将每个学生每次测试的分数分组到一个数据框变量中。
如果可能的话,你有什么想法吗?我应该怎么做?
如果您只需要标记栏成为学生的 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....
标记是数据帧列表:
> 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