繁体   English   中英

如何根据其他列中的值是否等于特定字符串来创建新列?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM