用字母替换R中数据框中的零和一

时间:2019-01-25 17:48:00

标签: r

我有一个数据帧(df),如下所示:

     df$a df$b       
      T   C          1          1          1          1          
      A   G          0          1          1          0          
      C   G          0          0          1          1          
      A   T          0          0          0          0          

我想要这个输出:

      T   C          C          C          C          C          
      A   G          A          G          G          A          
      C   G          C          C          G          G          
      A   T          A          A          A          A

基本上,如果为零,则在df $ a列中输入字母;如果为1,则在df $ b列中输入字母,并替换零和一。

有人知道如何在R中执行此操作吗?

3 个答案:

答案 0 :(得分:2)

您可以使用基本功能来执行此操作-请注意,我将第1列和第2列中的数据读取为字符,而不是因数。

df <- read.table(text = "       
      T   C          1          1          1          1          
                 A   G          0          1          1          0          
                 C   G          0          0          1          1          
                 A   T          0          0          0          0", header = FALSE, stringsAsFactors = FALSE)

df[, 3:ncol(df)] <- sapply(df[, 3:ncol(df)], function(x) ifelse(x == 1, df[, 2], df[, 1]))
df
#>   V1 V2 V3 V4 V5 V6
#> 1  T  C  C  C  C  C
#> 2  A  G  A  G  G  A
#> 3  C  G  C  C  G  G
#> 4  A  T  A  A  A  A

reprex package(v0.2.1)于2019-01-25创建

答案 1 :(得分:2)

df[, -(1:2)] <- ifelse(df[, -(1:2)] == 1, df[, 2], df[, 1])

答案 2 :(得分:0)

这是基本的R解决方案。

df[-(1:2)] <- t(apply(df, 1, function(x) {
  y <- as.numeric(x[-(1:2)])
  x[1:2][y + 1]
}))

df
#  a b c d e f
#1 T C C C C C
#2 A G A G G A
#3 C G C C G G
#4 A T A A A A

数据。

df <- read.table(text = "
a   b          c          d          e          f
T   C          1          1          1          1          
A   G          0          1          1          0          
C   G          0          0          1          1          
A   T          0          0          0          0   
", header = TRUE)