這真的很基本,但我陷入了過於複雜的代碼。我有一個CSV文件,包含一列測試,一列標記和一列學生。我想重新格式化數據,以便我有一排學生標記和測試列。初學者重新排列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
但我無法弄清楚如何以其他方式做到這一點。
當我停止時,「i」的值是多少?這應該是導致錯誤的那個人。你能展示那個子集嗎?另外,你是否嘗試用'j'替換嵌套循環中的'i'以獲得清晰? – 2013-04-10 13:04:50