R функции зацикливания - PullRequest
0 голосов
/ 21 января 2019

Привет! У меня есть фрейм данных df с тремя столбцами:

 a    b    c
-2    A    G
 1    G    C
 3    T    C
-4    A    G

Я хотел бы создать новый столбец d, который принимает значение в b, если значение в a отрицательно, в то время как принимает значение c, если положительно:

 a     b     c    d
-2     A     G    A
 1     G     C    C
 3     T     C    C
-4     A     G    A

Я написал что-то вроде этой функции, но она не работает

select_allele<-function(x,y){ 
  for(i in 1:nrow(df)){   
    if(df$a[i] > 0){
      df$d[i] <- return(y)   
    } else {
      df$d[i] <- return(x)   
    } 
}} 

mapply(select_allele, x=df$b, y=df$c)

Любая помощь высоко ценится.

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Есть несколько способов сделать это.Один способ с использованием функции sign, которая возвращает sign числа

df$d <- with(df, ifelse(sign(a) == -1, b, c))
df

#   a b c d
#1 -2 A G A
#2  1 G C C
#3  3 T C C
#4 -4 A G A

или с dplyr if_else

library(dplyr)
df %>% mutate(d = if_else(a < 0, b, c))

данные

df <- structure(list(a = c(-2L, 1L, 3L, -4L), b = c("A", "G", "T", 
"A"), c = c("G", "C", "C", "G")), .Names = c("a", "b", "c"), row.names = c(NA, 
-4L), class = "data.frame")
0 голосов
/ 21 января 2019

Предполагая, что при создании df вы устанавливаете stringsAsFactors = FALSE в data.frame().

df$d <-ifelse(df$a>0,df$c,df$b)

#   a b c d
#1 -2 A G A
#2  1 G C C
#3  3 T C C
#4 -4 A G A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...