2015-02-03 4 views
2

Я хочу проверить, имеет ли второй столбец моего информационного флага пустое значение или нет, и заполнить третий столбец с именем «label» соответственно.Заполнение третьего столбца на основе значения 2-го столбца в кадре данных в R

кадр данных, как это:

col1 col2 label 
hello there both filled 
this that both filled 
start ""  col2 empty 

Я пытаюсь это:

for (i in nrow(dataframe)) { 

if (isTRUE(dataframe[i,c('col2')] == "") == TRUE) 
    { dataframe[i,]$label <- "both filled" } 
else{ 
    dataframe[i,]$label <- "col2 empty" } 
    } 
} 

Но все это я получаю тот же знак для каждой строки

+1

Берут посмотрите в '? ifelse' –

+0

Удивительно, но есть [4665 вопросов по R ifelse] (http://stackoverflow.com/search?q=%5Br%5D+ifelse), а также [tag: vectorization], я не могу найти прямой дубликат. – smci

ответ

2

С ifelse одно решение (как упоминалось Дэвидом). ifelse является vectorised, как вы можете увидеть ниже:

df$label <- ifelse(df$col2=='', 'col2_empty', 'both_filled') 

output1:

> df 
    col1 col2  label 
1 hello there both_filled 
2 this that both_filled 
3 start  col2_empty 

или иным способом, с помощью регулярных Подменю:

#add col2_empty for empty second column first 
df$label[df$col2==''] <- 'col2_empty'  
#add both_filled for filled second column 
df$label[!df$col2==''] <- 'both_filled' 

output2:

> df 
    col1 col2  label 
1 hello there both_filled 
2 this that both_filled 
3 start  col2_empty 
Смежные вопросы