r - if 语句根据数据帧中的其他值为数据帧分配值
问题描述
我正在尝试根据“rat_ID”列中的数字在“冲动性”列中分配一个字符串字符(“LI”、“HI”或“MID”)。
我想用 if 语句来做这件事,但我无法让它工作
mydat1 <- data.frame("rat_ID" = 1:6, "Prem" = c(0,0,0,1,0,1), "Corr" = c(1,1,0,0,0,0), "Incorr" = c(0,0,0,0,1,0))
mydat1$rat_ID = as.numeric(mydat1$rat_ID)
for (i in length(mydat1$Corr)) {
if (mydat1$rat_ID[i]==1 | mydat1$rat_ID[i]==6) {
mydat1$impulsivity[i] = 'HI'
} else if (mydat1$rat_ID[i]==3 | mydat1$rat_ID[i]==4) {
mydat1$impulsivity[i] = 'LI'
} else {
mydat1$impulsivity[i] = 'MID'
}
}
出于某种原因,它为大多数动物提供了 NA 值,并为大鼠 #6 提供了“HI”。
解决方案
它为您NA
提供除最后一个值之外的所有值的原因是因为您的循环仅针对最后一个值运行。在你的for
循环做
for (i in 1:length(mydat1$Corr)) {
.....
.....
除了for
循环之外,您还可以考虑其他方法。一个与dplyr
,case_when
library(dplyr)
mydat1 %>%
mutate(impulsivity = case_when(rat_ID %in% c(1, 6) ~ "HI",
rat_ID %in% c(3, 4) ~"LI",
TRUE ~ "MID"))
# rat_ID Prem Corr Incorr impulsivity
#1 1 0 1 0 HI
#2 2 0 1 0 MID
#3 3 0 0 0 LI
#4 4 1 0 0 LI
#5 5 0 0 1 MID
#6 6 1 0 0 HI
ifelse
基础 R 中的或
mydat1$impulsivity <- with(mydat1, ifelse(rat_ID %in% c(1, 6), "HI",
ifelse(rat_ID %in% c(3, 4), "LI", "MID")))
推荐阅读
- python-3.x - 如何从 Python 线性模型中的模型摘要中获取拦截?
- perl - 如何将全局变量的内容保存到 Perl 中的词法变量并从 sub 访问它
- javascript - 根据索引决定类变量名
- javascript - 我可以使用插值字符串解构项目吗?
- python - 如何使用函数调用在 Python 中循环 INPUT 语句
- android - 将一些数据传递给Activity后,如何从同一个Fragment中结束一个Fragment?
- spring-boot - 配置客户端的自动刷新在 Spring Boot 2 中不起作用
- java - For 循环 - 打印操作数除以二
- aggregate - EFK Stack 中的 Fluentbit 和 Fluentd,为什么我需要使用 fluentd?
- swift - 是否可以在 macOS 状态栏中放置矢量(或字体)图标?