[英]How do I create a new column based off of specific conditions of other columns in R?
[英]How do I create a new column based on whether the values in other columns are equal to specific strings?
我是编码和 R 的新手,但想在我的硕士研究项目中将其用于数据分析。
我希望根据该行其他列中的值是否等于特定值来创建一个新列。 我尝试了多种方法,但都没有成功,并且遇到了故障排除问题。
方法1 :嵌套for循环
y <- 1
for (i in Scores$PCLVL){
for (j in Scores$PSLVL){
if (i == "High" && j == "High"){
Scores$Perf[y] <- "Mixed Perfectionism"
y <- y + 1
} else if (i == "Low" && j == "High"){
Scores$Perf[y] <- "PSP"
y <- y + 1
}
else if (i == "High" && j == "Low"){
Scores$Perf[y] <- "ECP"
y <- y + 1
}
else if (i == "Low" && j == "Low"){
Scores$Perf[y] <- "Non Perfectionism"
y <- y + 1
}
}
}
方法2 :if语句等价
Scores$Perf <- if (Scores$PCLVL == "High" & Scores$PSLVL == "High", 'Mixed
Perfectionism',
if else (Scores$PCLVL == "High" & Scores$PSLVL == "Low", 'ECP',
if else (Scores$PCLVL == "Low" & Scores$PSLVL == "High", 'PSP',
'Non Perfectionism'
if else (Scores$PCLVL == "Low" & Scores$PSLVL == "Low", 'Non Perfectionism', 'NA'))))
数据框开始看起来像这样:
PCLVL PSLVL
1 High High
2 High High
3 Low High
4 High High
5 High High
6 Low High
我希望它看起来像这样:
PCLVL PSLVL PERF
1 High High Mixed Perfectionism
2 High Low ECP
3 Low High PSP
4 High High Mixed Perfectionism
5 Low Low Non Perfectionism
6 Low High PSP
目前尚不清楚您想要什么,但也许可以尝试ifelse()
。 就像是
Scores <- within(Scores, {PERF <- ifelse(
(PCLVL=="High")&(PSLVL=="High"), "Mixed Perfectionism",
ifelse((PCLVL=="High")&(PSLVL=="Low"), "ECP",
ifelse((PCLVL=="Low")&(PSLVL=="High"), "PSP",
ifelse( ...
我没有完成代码,以同样的方式继续。
请注意, if...
用于代码逻辑,并且不对数据帧的行进行操作。 ifelse
function 是矢量化版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.