这真的很基本,但我陷入了过于复杂的代码。我有一个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