1
创建新载体,并提前感谢您的帮助。我对R非常陌生,在代码方面遇到了一些麻烦,对我来说看起来应该起作用,但不是。我有一个像下面的一个数据帧:R - 根据现有矢量元素
studentID classNumber classRating
7 1 4
7 2 4
7 4 3
79 1 5
79 2 3
116 1 5
116 2 4
134 1 5
134 3 5
134 4 5
而且我希望它这样写的:
Student ID class1 class2 class3 class4
7 4 4 NA 3
79 5 3 NA NA
116 5 4 NA NA
134 5 NA 5 5
我试图拼凑,我已经遇到和它在一起的不同的东西似乎最好的方法是创建一个新的数据框架和矩阵,然后从当前数据框中填充它。我想出了下面的断码:
classRatings = data.frame(matrix(NA,4,5))
for(i in 1:nrow(classDB)){
#Find ratings by each student
rowsToReplace = classDB$studentID==classRatings$studentID[i]
#Make a row for each unique studentID in classRatings
classDB$studentID[rowsToReplace] = classRatings$studentID[i]
#for each studentID, find put the given rating for each unique class into
#it's own vector
for(j in classDB$classNumber){
if(classDB$classNumber==1){classRatings$class1==classDB$classRating}[j]
if(classDB$classNumber==2){classRatings$class2==classDB$classRating}[j]
if(classDB$classNumber==3){classRatings$class3==classDB$classRating}[j]
if(classDB$classNumber==4){classRatings$class4==classDB$classRating}[j]
if(classDB$classNumber==5){classRatings$class5==classDB$classRating}[j]
}
}
我得到一个错误,说:
条件具有长度> 1,只有第一个元素将被用于
和我超出了我的技能水平来弄清楚。任何帮助表示赞赏。
尝试'dcast(DF,studentID〜classNumber,value.var = 'classRating')''从库(reshape2) ' – akrun 2015-02-06 16:10:57
您还应该阅读'ifelse'的帮助文件(矢量化),并了解它与if(cond)expr1 else expr2'(非矢量化)的区别。 – nrussell 2015-02-06 16:12:30
'reshape'让你关闭:''reshape(dat,v.names =“classRating”,idvar =“studentID”,timevar =“classNumber”,direction =“wide”)' – user20650 2015-02-06 16:12:58