首页 > 解决方案 > 为什么这个 for 循环不能正确填充新的数据框?

问题描述

我正在尝试创建一个新的数据框,该数据框根据调查答案计算分数。我似乎无法正确填充分数数据框。

我尝试在 for 循环中使用一系列 if else 语句。

df <- rbind(c("Y", "no", "Often"), c("N", "yes", "always"), c("Y", "yes", 
    "never"))
score <- as.data.frame(matrix(0, nrow = 3, ncol = 3))
t <- 1

for (t in nrow(df)) {

  if (df[t,1] == "Y") {
    score[t,1] <- 2
  } else if (df[t,2] == "yes") {
    score[t,2] <- 2
  } else if (df[t,3] == "always") {
    score[t,3] <- 2
  } else if (df[t,3] == "often") {
    score[t,3] <- 1
  }

  next

}

我正在寻找输出为:2、0、1、0、2、2、2、2、0

我得到:0、0、0、0、0、0、2、0、0

标签: rloops

解决方案


因为在进入循环之前t被分配了等于 , 的单个值。nrow(df)

这是您的重新工作(也更正了一个错字):

df <- rbind(c("Y", "no", "Often"), 
            c("N", "yes", "always"), 
            c("Y", "yes", "never"))
score <- as.data.frame(matrix(0, nrow = 3, ncol = 3))

for (t in 1:nrow(df)) {

  if (df[t,1] == "Y") {
    score[t,1] <- 2
  } 
  if (df[t,2] == "yes") {
    score[t,2] <- 2
  } 
  if (df[t,3] == "always") {
    score[t,3] <- 2
  } 
  if (df[t,3] == "Often") {
    score[t,3] <- 1
  }
}

score
  V1 V2 V3
1  2  0  1
2  0  2  2
3  2  2  0

推荐阅读