Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将数据框变量重塑为列表_R_Dataframe_Reshape_Reshape2 - Fatal编程技术网

R 将数据框变量重塑为列表

R 将数据框变量重塑为列表,r,dataframe,reshape,reshape2,R,Dataframe,Reshape,Reshape2,我对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

我对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
简言之,我想为每个学生将他们在每次测试中的分数分组为一个变量,即数据框架


如果可能的话,你有什么想法吗?我应该怎么做?

如果你只需要将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....
现在,为了像您展示的那样打印,您需要一个自定义打印功能,但无论如何,您不应该需要它。或者只需添加空行即可获得所需的打印输出。这既不美观,也不像您的输出,但这是一个开始:

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

dat3如果您只需要将标记列作为学生的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....
现在,为了像您展示的那样打印,您需要一个自定义打印功能,但无论如何,您不应该需要它。或者只需添加空行即可获得所需的打印输出。这既不美观,也不像您的输出,但这是一个开始:

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

dat3到现在为止你都试了些什么?把信息放在你的问题中。你只是在谈论这个分层类型表中数据的表示方式吗?你可以为此编写一个打印方法,但这不是R中的默认行为。这种排列方式对分析不是很有用,它更多的是用于表示。或者你可以使用
split
,至少这会生成所有单独的数据帧。@Konrad我可能误解了你的建议,但你所引用的内容不会对当前的数据帧有太大的改变,只是名称不同。到目前为止你都尝试了什么?把信息放在你的问题中。你只是在谈论这个分层类型表中数据的表示方式吗?你可以为此编写一个打印方法,但这不是R中的默认行为。这种排列方式对分析不是很有用,它更多的是用于表示。或者你可以使用
split
,至少这会生成所有单独的数据帧。@Konrad我可能误解了你的建议,但你所引用的内容不会对当前的数据帧有太大改变,只是名称不同。