在R中插入2D矩阵的可变长度行

在R中插入2D矩阵的可变长度行,r,matrix,transpose,insertion,R,Matrix,Transpose,Insertion,我有以下格式的数据 Reg_No Subject AA11 Physics AA11 Chemistry AA12 English AA12 Maths AA12 Physics 我正在尝试将这些数据转换为行方式 Physics Chemistry English Maths Physics 我知道每个学生最多可以修8门课 我试图创建一个矩阵,可以将上述数据存储为可变行(每个学生有不同数量的科目) 我已经

我有以下格式的数据

Reg_No     Subject
  AA11     Physics
  AA11   Chemistry
  AA12     English
  AA12       Maths
  AA12     Physics
我正在尝试将这些数据转换为行方式

Physics   Chemistry
English       Maths   Physics
我知道每个学生最多可以修8门课

我试图创建一个矩阵,可以将上述数据存储为可变行(每个学生有不同数量的科目)

我已经编写了以下代码

# read csv file
Term4 <- read.csv("Term4.csv")
# Find number of Students
Matrix_length <- length(unique(Term4$Reg_No))
# Uniquely store their reg number
Student <- unique(Term4$Reg_No)
# create matrix to be inserted as csv
out <- matrix(NA, nrow=Matrix_length , ncol=8) # max subjects = 8 so ncol =8
# iterate to get each reg number's subjects
for (n in 1:Matrix_length) {
    y <- Term4[Term4[,"Reg_No"] == Student[n],]$Subject
    # transpose Courses as a single column into row and insert it in the matrix
    out[n,] <- t(y)
}
#读取csv文件
Term4可以做到这一点:

df <- data.frame(Reg_No=c('AA11','AA11','AA12','AA12','AA12'), Subject=c('Physics','Chemistry','English','Maths','Physics') );
reshape(transform(df,time=ave(c(Reg_No),Reg_No,FUN=seq_along)),dir='w',idvar='Reg_No');
##   Reg_No Subject.1 Subject.2 Subject.3
## 1   AA11   Physics Chemistry      <NA>
## 3   AA12   English     Maths   Physics

我将
课程
(在您的原始代码中)更改为
主题
,因为它看起来像一个打字错误。
m <- matrix(NA_character_,2,8);
m;
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] NA   NA   NA   NA   NA   NA   NA   NA
## [2,] NA   NA   NA   NA   NA   NA   NA   NA
m[1,] <- letters[1:3]; ## fails; indivisible
## Error in m[1, ] <- letters[1:3] :
##   number of items to replace is not a multiple of replacement length
m[2,] <- letters[1:3][1:ncol(m)]; ## works
m;
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] NA   NA   NA   NA   NA   NA   NA   NA
## [2,] "a"  "b"  "c"  NA   NA   NA   NA   NA