【问题标题】:re-coding based on two columns to rest of columns using R使用 R 基于两列重新编码到其余列
【发布时间】:2012-02-10 18:44:59
【问题描述】:

我有大数据,迷你版如下:

    Pr1  <- c("AA", "BB", "BB", "BB", "BB", "--", "AA", "--")
    Pr2  <- c("BB", "AA", "AA", "AA", "AA", "--", "--", "BB")
    varA  <- c("BB", "AA", "AA", "BB", "BB", "AA", "--", "BB")
    varB  <- c("AA", "BB", "AA", "BB", "BB", "AA", "--", "BB")
    varC <- c("AB", "--", "AB", "BB", "AB", "AA", "--", "AB")
    varD <- c("BB", "AA", "AB", "BB", "BB", "AB", "AB", "BB")
     mydf <- data.frame (Pr1, Pr2, varA, varB, varC, varD)

数据如下:

     mydf 

   Pr1 Pr2 varA varB varC varD
1  AA  BB   BB   AA   AB   BB
2  BB  AA   AA   BB   --   AA
3  BB  AA   AA   AA   AB   AB
4  BB  AA   BB   BB   BB   BB
5  BB  AA   BB   BB   AB   BB
6  --  --   AA   AA   AA   AB
7  AA  --   --   --   --   AB

8  --  BB   BB   BB   AB   BB

我需要根据前两个重新编码数据框中的其余变量:

如果 varA 到 varD 的元素(数据集结束)-

  • 等于 Pr1 的值比 varA 到 varD 的元素将是“A”,
  • 等于 Pr2 值而不是 varA 到 varD 的元素将为“B”

  • 不等于 Pr1 和 Pr2 而 varA 到 varD 将是“H”

然而 -- 是缺失值,上述规则不适用于这种情况。

如果缺少 Pr1 和 Pr2 (--),则所有值的比较结果为“NA”。

因此预期的结果:

   Pr1 Pr2 varA varB varC varD
1  AA  BB   B    A    H    B
2  BB  AA   B    A   --    B
3  BB  AA   B    B    H    H
4  BB  AA   A    A    A    A
5  BB  AA   A    A    H    A
6  --  --   NA   NA   NA   NA
7  AA  --   NA   NA   NA   NA

8  --  BB   NA   NA   NA   NA

我可以找到一种方法来执行它。

【问题讨论】:

    标签: r loops dataset format


    【解决方案1】:

    编写一个仅针对 1 行执行此操作的小函数,然后应用它。我发现先转换成矩阵很方便

        mymat <- as.matrix(mydf)
        recodeRows <- function(x){
            if (any(x[1:2]=="--")){
                 x[3:ncol(mymat)] <- NA
            } else {
                 x[3:ncol(mymat)][x[3:ncol(mymat)]==x[1]] <- "A"
                 x[3:ncol(mymat)][x[3:ncol(mymat)]==x[2]] <- "B"
                 x[3:ncol(mymat)][!x[3:ncol(mymat)] %in% c("A","B","--")] <- "H"
            }
        x
        }
        t(apply(mymat,1,recodeRows))
    

    [已编辑以包含 John 的 ncol(mymat) 评论]

    【讨论】:

    • 使用 3:ncol(mymat),这里我们有超过 6 列(不用计算
    【解决方案2】:

    通过设置拉取数据时可以为自己节省一些工作:

    na.strings="--" 自动将“--”元素设置为NA,您也可以将其设置为不将字符串转换为因子。 as.is=TRUE

    ?read.table

    这两个设置意味着您现在正在处理一些不是自动分解的并且在应该有 NA 的地方。

    而且...在我写这篇文章的时候,有人已经提出了一个函数,所以我将停在那里,您可以将其视为扩展评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      相关资源
      最近更新 更多