【问题标题】:If statement to fill Matrix, incorrect number of subscriptsif语句填充矩阵,下标数量不正确
【发布时间】:2017-04-12 18:12:39
【问题描述】:

我正在尝试编写一个 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 语句中的 i 替换为单个数字,它可以填充矩阵 A 的那一行,但它不会填充多于一行。 TIA

【问题讨论】:

  • 提供示例数据和预期输出。两个数据框是否具有相同的暗淡?

标签: r matrix


【解决方案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)

【讨论】:

    【解决方案2】:

    您可能想尝试指定 ncol=dim(mets)[2] 以确保您提供相同数量的输入来填充矩阵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 2021-08-21
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多