Замена нуля и единицы в кадре данных в R буквами - PullRequest
0 голосов
/ 25 января 2019

У меня есть фрейм данных (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 голосов
/ 25 января 2019

Вот базовое решение 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)
0 голосов
/ 25 января 2019
df[, -(1:2)] <- ifelse(df[, -(1:2)] == 1, df[, 2], df[, 1])
0 голосов
/ 25 января 2019

Вы можете сделать это с помощью базовой функциональности - обратите внимание, что я читаю данные в столбцах 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

Создано в 2019-01-25 пакетом Представлять (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...