如何解决在数据框上的 if 语句中赋值?
我希望有人可以看看下面的 if 语句并告诉我应该如何更改它以获得我想要的结果。
本质上,我希望代码(1)遍历(迭代)数据框 beh_data 中的每一行,以及(2)如果“提示”列中的字符与“face1”列中的字符相同,我想(3)从“Enc_trials.thisRepN”列中获取值,并且(4)将它分配给“scr_of_trial”列。如果它们不相同,我想为“scr_of_trial”列分配一个 NA。
当前,代码运行,但将 NA 分配给“scr_of_trial”列中的每一行。
谁能告诉我为什么?
代码如下:
j <- 1
i = as.character(beh_data$Cue[1:1])
for (x in 1:NROW(beh_data$Cue)) {
if (beh_data$Cue[j] == beh_data$face1[j]) {
beh_data$scr_of_trial[j] <- beh_data$Enc_trials.thisRepN[j]
j <- j + 1
i = as.character(beh_data$Cue[1:1+j])
}
else {
beh_data$scr_of_trial[j] <- NA
j <- j + 1
i = as.character(beh_data$Cue[1:1+j])
next
}
}
解决方法
将您的想法转变为一次整体向量。
一些技巧:
-
ifelse
;虽然在这里工作正常,但要意识到ifelse
有 issues withclass
。beh_data$scr_of_trial <- ifelse(beh_data$Cue == beh_data$face1,beh_data$Enc_trials.thisRepN,NA_character_)
-
replace
;类似的功能,没有class
问题:replace(beh_data$Enc_trials.thisRepN,beh_data$Cue != beh_data$face1,NA_character_)
-
使用我所说的“指标变量”:
ind <- beh_data$Cue == beh_data$face1 beh_data$scr_of_trial <- NA_character_ beh_data$scr_of_trial[ind] <- beh_data$Enc_trials.thisRepN
没有 for
循环,一次只有整个向量。
在合理的情况下,我倾向于使用特定于类的 NA
类型,例如 NA_character_
;虽然基本 R 的函数很乐意为您向上转换为您拥有的任何类,但 R 中的许多其他方言(例如,dplyr
、data.table
)不太宽容。有点声明式编程,有点风格,也许有点势利,我不知道...
(这一切都未经实际数据测试。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。