2014-02-13 3 views
0

у меня есть кадр данных (df), который выглядит следующим образом:Создайте новый столбец с описанием

gene    times.x  times.y times.z 
AC113084.1  1   NA   0 
AC124108.15-1  0   5   3 
AC154871.1  NA   NA   12 

То, что я пытаюсь сделать, это новый столбец df$new, где я буду иметь названия в зависимости различных комбинаций на колоннах раз (АБВ), как показано ниже:

gene    times.x  times.y times.z   new 
AC113084.1  1   NA   0    located.up 
AC124108.15-1  0   5   3    located.down 
AC154871.1  NA   NA   12    not.located 

Не могли бы вы дать мне предложения, как я могу сделать этот столбец, чтобы назначить эти характеристики (например, я хочу, чтобы напечатать следующее):

located.up в колонке new если times.x>1 & times.y=NA & times.z=0

located.down в колонке new если times.x=0 & times.y>1 & times.z>1

not.located в колонке new если times.x=NA & times.y=NA & times.z>1

+2

и которые другие условия для located.down и not.located? Вы пытались сделать это условие для получения логического вектора и в соответствии с этим местом имя в новом столбце? – Llopis

+1

Ваше условие условия должно быть 'DF $ times.x> = 1 & is.na (DF $ times.y) & DF $ times.z == 0'. Вывод, который является логическим вектором, может использоваться для подмножества вашего 'нового':' DF $ new [DF $ times.x> = 1 & is.na (DF $ times.y) & DF $ times.z == 0 ] <- "loc.up" ' –

+1

Что произойдет, если ни одно из трех условий не выполнено? –

ответ

3

Вот один из способов создать новый столбец, основанный на правилах:

ix1 <- df$times.x > 1 
iyn <- is.na(df$times.y) 
iz0 <- !df$times.z 
ix0 <- !df$times.x 
iy1 <- df$times.y > 1 
iz1 <- df$times.z > 1 
ixn <- is.na(df$times.x) 

# new vector 
newCol <- character(nrow(df)) 

# replace values in vector 
newCol[ix1 & iyn & iz0] <- "located.up" 
newCol[ix0 & iy1 & iz1] <- "located.down" 
newCol[ixn & iyn & iz1] <- "not.located" 

# add to data frame 
df$new <- newCol 

Результат:

  gene times.x times.y times.z   new 
1 AC113084.1  1  NA  0    
2 AC124108.15-1  0  5  3 located.down 
3 AC154871.1  NA  NA  12 not.located 

Обратите внимание, что я следовал вашим правилам. Следовательно, полученный результат для первой строки не соответствует вашему примеру.

1

Вы можете просто взять gene$new <- "строительство, если и другого заявления".

+0

Не могли бы вы дать мне пример того, как вы это сделаете, поскольку я новичок в R? – Anna

+1

@Anna В biostar у вас есть что-то http://www.biostars.org/p/93085/#93087, но вам нужно объяснить, каковы другие условия, как я ранее просил – Llopis

+0

большое вам спасибо! Я отредактировал свой оригинальный пост с разными условиями ... не могли бы вы привести пример того, как это сделать? – Anna

2

Вы можете создавать вложенные ifelse заявления, например:

df$new <- 
    ifelse(df$times.x>1 & is.na(df$times.y) & df$times.z==0, 
     "located.up", 
     ifelse(df$times.x==0 & df$times.y>1 & df$times.z>1, 
       "located.down", 
       ifelse(is.na(df$times.x) & is.na(df$times.y) & df$times.z>1, 
         "not.located",NA))) 
Смежные вопросы