我正在尝试编写一个for循环,如果一个矩阵的单元格与一个字母匹配,则填充一个空白矩阵,其中整个行匹配。这是我的代码
mets<-data.frame(read.csv(file="Metabolite_data.csv",header=TRUE))
full<-length(mets[,6])
A=matrix(,nrow=4930,ncol=8, byrow=T)
for (i in 1:full){
if (mets[i,6]=="A") (A[i,]=(mets[i,]))
}
如果我用if一个数字替换if语句中的i,它就可以填充矩阵A的那一行,但是它不会填充多于一行。 TIA
答案 0 :(得分:1)
您可能会遇到从数据框到矩阵的问题。可能只是使用“mets”作为矩阵而不是数据框可以解决您的问题,或者您可以在for循环中使用as.matrix
。由于我没有“metabolite_data.csv”,因此后者的示例包含了补充数据:
mets <- matrix(sample(LETTERS[1:4], 80, replace = TRUE), nrow = 10, ncol = 8)
mets <- as.data.frame(mets)
A <- matrix(nrow = nrow(mets), ncol = ncol(mets), byrow = TRUE)
for(i in 1:nrow(mets)){
if(mets[i,6] == "A"){
A[i,] = as.matrix(mets[i,])
}
}
print(A)
答案 1 :(得分:0)
您可能想尝试指定ncol=dim(mets)[2]
以确保提供相同数量的输入来填充矩阵。