这真的很基本,但我被过于复杂的代码所困。我有一个 CSV 文件,其中包含一列测试、一列分数和一列学生。我想重新格式化数据,以便我有学生分数行和测试列。
我创建了一个单独的 csv,其中包含名为“students.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
循环,但我无法弄清楚如何做到这一点。