これは本当に基本的なことですが、非常に複雑なコードで行き詰っています。テストの列、マークの列、学生の列を含む CSV ファイルがあります。学生のマークの行とテストの列があるように、データを再フォーマットしたいと思います。
今のところ簡単だったので、「students.csv」と呼ばれる学生を (番号コードとして) 含む別の csv を作成しました。
52 人の生徒と 50 のテストがあります。
私は一人の学生と一緒に働くために次のものを手に入れることができます:
matricNumbers <- read.csv("students.csv")
students <- as.vector(as.matrix(matricNumbers))
students
data <- read.csv("marks.csv")
studentSubset <- data[data[2] == 1150761,]
marksSubset <- as.vector(as.matrix(studentSubset[5]))
ll <- list()
ll<-c(list(marksSubset), ll)
dd<-data.frame(matrix(nrow=50,ncol=50))
for(i in 1:length(ll)){
dd[i,] <- ll[[i]]
}
dd
for
しかし、すべての学生を通過するループでこれを機能させることはできないようです。
getMarks <-function(studentNumFile,markFile){
matricNumbers <- read.csv(studentNumFile)
students <- as.vector(as.matrix(matricNumbers))
data <- read.csv(markFile)
for (i in seq_along(students)){
studentSubset <- data[data[2] == i,]
marksSubset <- as.vector(as.matrix(studentSubset[5]))
ll <- list()
ll<-c(list(marksSubset), ll)
dd<-data.frame(matrix(nrow=52,ncol=50))
for(i in 1:length(ll)){
dd[i,] <- ll[[i]]
}
}
return(dd)
}
getMarks("students.csv","marks.csv")
エラーが発生しています:
Error in `[<-.data.frame`(`*tmp*`, i, , value = logical(0)) : replacement has 0 items, need 50
これはネストされたループが原因だと確信してfor
いますが、それ以外の方法でこれを行う方法がわかりません。