Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中for循环之后的数据帧没有差异_R_Dataframe_For Loop_If Statement - Fatal编程技术网

R中for循环之后的数据帧没有差异

R中for循环之后的数据帧没有差异,r,dataframe,for-loop,if-statement,R,Dataframe,For Loop,If Statement,我是Stackoverflow新手,还没有找到一个可以回答我问题的主题,所以我现在就把它贴在这里 我试图将数据帧中的是/否字符更改为整数1和2。我只想为45个科目中的4个做这个。我想使用ifelse语句进行for循环来实现这一点。这个循环一开始似乎是有效的,但是当我打开数据框或者用head(数据)查看时,数据框中没有任何变化 数据框称为“gatingdata”,列称为“correct_buttonBox” 这就是我所做的: ffor row in 1:nrow(gatingdata$correc

我是Stackoverflow新手,还没有找到一个可以回答我问题的主题,所以我现在就把它贴在这里

我试图将数据帧中的是/否字符更改为整数1和2。我只想为45个科目中的4个做这个。我想使用ifelse语句进行for循环来实现这一点。这个循环一开始似乎是有效的,但是当我打开数据框或者用head(数据)查看时,数据框中没有任何变化

数据框称为“gatingdata”,列称为“correct_buttonBox”

这就是我所做的:

ffor row in 1:nrow(gatingdata$correct_buttonBox)) {
  if (gatingdata$subject_nr == "19") {
    ifelse(gatingdata$correct_buttonBox=="no", 1, 2)
  }  if (gatingdata$subject_nr == "27") {
    ifelse(gatingdata$correct_buttonBox=="no", 1, 2)
  } if (gatingdata$subject_nr == "35") {
    ifelse(gatingdata$correct_buttonBox=="no", 1, 2)
  } if (gatingdata$subject_nr == "42") {
    ifelse(gatingdata$correct_buttonBox=="no", 1, 2)
  }
}
我也尝试过:

for(row in 1:nrow(gatingdata$correct_buttonBox)) {
  which[(gatingdata$subject_nr == "19"),] {
    ifelse(gatingdata$correct_buttonBox=="no", 1, 2)
  }  which[(gatingdata$subject_nr == "27"),] {
    ifelse(gatingdata$correct_buttonBox=="no", 1, 2)
  } which[(gatingdata$subject_nr == "35"),] {
    ifelse(gatingdata$correct_buttonBox=="no", 1, 2)
  } which[(gatingdata$subject_nr == "42"),] {
    ifelse(gatingdata$correct_buttonBox=="no", 1, 2)
  }
} 
我还尝试使用“I in 1:length(data$column)”。也不管用

如果有人能告诉我我做错了什么,我会非常感激的!我在网上搜索中找不到任何与我的问题相关的信息,我已经尝试解决这个问题好几个小时了。这是循环的第7或第8个版本,但对我来说,这似乎是最符合逻辑的

最好的

M.H.

一些问题:

  • 在R中,以这种方式循环很少是正确的解决方案(逻辑索引会更好)
  • 您没有将
    ifelse
    调用的结果存储在任何位置
  • “correct_buttonBox”似乎是字符数据,但您正在尝试交换数字数据
  • 在没有循环的情况下,更有效的方法是利用R的逻辑索引。像下面这样的方法可能会奏效。我建议您在这里检查每行代码的结果,以了解发生了什么。请注意,我在这里总是使用字符数据(即,
    subject=='42'
    ,而不是
    subject==42
    ),但从您的示例中不清楚这是否正确。请使用
    str(gatingdata)
    检查数据的格式

    subjects <- gatingdata$subject %in% c('19', '27', '35', '42') # logical vector of subjects of interest
    yes <- gatingdata$correct_buttonBox == 'yes' # logical vector of 'yes' responses
    no <- gatingdata$correct_buttonBox == 'no' # logical vector of 'no' responses
    
    gatingdata$correct_buttonBox[subjects & yes] <- '2' # recode yes's
    gatingdata$correct_buttonBox[subjects & no] <- '1' # recode no's
    

    主题你根本没有在
    for
    循环中使用
    …语法上有点混乱,我会花一些时间来学习如何构造for循环和if-else语句。你也使用了
    哪个
    错误。你能编辑你的答案以包含
    dput(head(gatingdata,50))的输出吗
    ?这将让我们看到您的数据集的前50行,这将使帮助变得更加容易。非常感谢大家的回答!我现在确实在没有for循环的情况下解决了这个问题!我发现循环比我的主管预期的要复杂一些。我在我的大学找到了s.b.,他将为我举办更多的研讨会统计方法,我会参加的!非常感谢你快速而有用的回答!循环是一位主管的建议……我会试试你的建议!对我来说,它似乎更具可追溯性和逻辑性!我唯一不明白的是,我如何在我的数据框内进行更改?我必须将所有这些都嵌套在数据框内吗应用函数?有许多方法可以访问和修改数据帧的内容。请尝试键入?$“如果我使用您发布的代码执行此操作,则我的数据帧中不会发生任何事情。它看起来仍然像以前一样。可能还有另一个问题。