我是 R 的新手,遇到了在数据框中正确填充一列数据的问题。我正在使用一系列 if / else if 语句基于另一列 (P_Value) 填充两列 (P_Score 和 P_Class)。
i<- 0
nr<- nrow(myData)
while(i<nr){
i<-1+i
if(toString(myData$P_Value[i])=="NA"){ myData$P_Score[i] <- myData$P_Value[i]
} else if (as.numeric(toString(myData$P_Value[i]))<5){
myData$P_Score[i] <- 1; myData$P_Class[i] <- "Minimal Depression";
} else if (as.numeric(toString(myData$P_Value[i]))<10){
myData$P_Score[i] <- 2; myData$P_Class[i] <- "Mild Depression";
} else if (as.numeric(toString(myData$P_Value[i]))<15){
myData$P_Score[i] <- 3; myData$P_Class[i] <- "Moderate Depression";
} else if (as.numeric(toString(myData$P_Value[i]))<20){
myData$P_Score[i] <- 4; myData$P_Class[i] <- "Moderate-Severe Depression";
} else
myData$P_Score[i] <- 5; myData$P_Class[i] <- "Severe Depression";
}
Run Code Online (Sandbox Code Playgroud)
然而,这并没有给我想要的结果,相反,我得到了这个:
P_Value P_Score P_Class
4 1 Severe Depression
25 5 Severe Depression
8 2 Severe Depression
13 3 Severe Depression
17 4 Severe Depression
1 1 Severe Depression
12 3 Severe Depression
Run Code Online (Sandbox Code Playgroud)
所以 P_Score 填充得很好,但 P_Class 总是默认为“严重抑郁症”。我一定在执行基于 1 if 条件的多个语句时遇到了一些问题,但我无法弄清楚我做错了什么。我在其他地方读过,只要你在语句后面加上分号都应该有效,但这显然行不通。
我也试过这样分隔命令:
} else if (as.numeric(toString(myData$P_Value[i]))<5){
myData$P_Score[i] <- 1
myData$P_Class[i] <- "Minimal Depression"
Run Code Online (Sandbox Code Playgroud)
但这似乎也不起作用。请帮忙!
R 有一个函数,不需要任何循环。请阅读?cut:
设置示例
myData
# P_Value
# 1 4
# 2 25
# 3 8
# 4 13
# 5 17
# 6 1
# 7 12
# 8 NA
grps <- cut(myData$P_Value,
breaks=c(-Inf, 5, 10, 15, 20, Inf),
labels=c("Min Dep", "Mild Dep", "Mod Dep", "Mod-Sev Dep", "Sev Dep"))
Run Code Online (Sandbox Code Playgroud)
创建组后,我们可以从中创建一个 Score 和 Class 列
myData$P_Score <- as.numeric(grps)
myData$P_Class <- grps
myData
# P_Value P_Score P_Class
# 1 4 1 Min Dep
# 2 25 5 Sev Dep
# 3 8 2 Mild Dep
# 4 13 3 Mod Dep
# 5 17 4 Mod-Sev Dep
# 6 1 1 Min Dep
# 7 12 3 Mod Dep
# 8 NA NA <NA>
Run Code Online (Sandbox Code Playgroud)