【问题标题】:R: how to add new column and fill with values conditional on other column (simple)R:如何添加新列并填充以其他列为条件的值(简单)
【发布时间】:2018-04-03 00:27:46
【问题描述】:

我知道这个问题非常简单并且已经得到解答 - 我的问题是我是 R 的 完全 初学者(我的意思是 COMPLETE 初学者),所有的答案和解释我发现与此查询有关的内容很复杂,并且需要比我目前拥有的更深入的 R 理解(并且有时间学习)。

我有一个名为“overviewGenes”的大型 csv 数据集(500k+ 行数据),我需要创建一个新列并用“1”或“0”填充新列中的每个单元格,具体取决于对应行中另一列的值。

现有列“Gexact”在每一行中包含“精确”或“非特定”。我希望 R 创建列('BooleanExact'),并且对于每一行,如果 Gexact 列中的值显示为“exact”,则输入“0”,如果 Gexact 列中的值显示为“non”,则输入“1” -具体的'。

所以,下面是我希望它出现的表示:

Gexact       BooleanExact 
exact           0
exact           0
non-specific    1
exact           0
non-specific    1

就像我说的,非常简单。我曾尝试在类似问题的答案中使用示例代码,但无论出于何种原因(可能是我完全缺乏 R 经验),都没有奏效。我曾尝试使用 'for j in ___' 循环等,但这似乎不是正确的方法。

任何关于我应该使用的代码的帮助,以最简单的语言和方法,将不胜感激!

【问题讨论】:

    标签: r dataset


    【解决方案1】:

    我们可以使用比较运算符创建一个逻辑向量,然后用 `as.integer 将其强制为二进制

    df1$BooleanExact  <- as.integer(df1$Gexact != "exact")
    df1
    #        Gexact BooleanExact
    #1        exact            0
    #2        exact            0
    #3 non-specific            1
    #4        exact            0
    #5 non-specific            1
    

    比较运算符

    df1$Gexact != "exact"
    

    返回 TRUE/FALSE 的逻辑向量,其中 TRUE 表示不“精确”的元素,FALSE 表示“精确”的元素

    as.integer包装,将TRUE转换为1,FALSE转换为0

    数据

    df1 <- structure(list(Gexact = c("exact", "exact", "non-specific", "exact", 
    "non-specific")), .Names = "Gexact", row.names = c(NA, -5L), 
     class = "data.frame")
    

    【讨论】:

    • 恐怕这完全超出了我的想象。我真的不知道这意味着什么。
    • @Anna 用一些描述更新了答案
    • 啊,有道理,谢谢。但是,当我对此进行测试时,我似乎弄错了 - 'exact' 的实例被分配给 1/TRUE,而不是 0/FALSE。
    • 如果这是一个可能起作用的因素:df1$BooleanExact &lt;- unclass(df1$Gexact)-1
    • 是的,但它的安全性和可读性较差,只是效率高一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2017-01-08
    • 1970-01-01
    • 2023-01-04
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多