2015-04-05 3 views
0

Только начал использовать ddplyr {plyr} и у меня возникли следующие проблемы:Неожиданные результаты с ddplyr в R

я создаю простой кадр данных:

require(plyr) 
df <- data.frame(day=c('monday', 'tuesday'), week=c(47,48)) 

Теперь, когда я запускаю это:

ddply(df, .(day), transform, 
    b = ifelse(week==47, week, day) 
) 

я получаю это:

 day week b 
1 monday 47 47 
2 tuesday 48 2 

В то время как я пытаюсь получить это:

 day week  b 
1 monday 47  47 
2 tuesday 48 tuesday 

Я думаю, что часть проблемы заключается в том, что я смешивания числовые и строковые переменные в одном столбце. Любая идея, как я могу получить свой предполагаемый результат? Благодаря!

+2

Если вы рассматриваете как день, но и неделю как символ, вы получаете ожидаемый результат. По крайней мере, я получаю ожидаемый результат таким образом с моим Mac. – jazzurro

+0

попробуйте добавить 'stringsAsFactors = FALSE' к вашему вызову' data.frame' –

+2

Это дало мне ожидаемый результат в linux mint 'ddply (df,. (Day), transform, b = ifelse (week == 47, as .character (неделя), as.character (day))) 'как @jazzurro, упомянутый в комментариях. – akrun

ответ

1

Я удивлен, что вы не получили ожидаемых результатов, установив stringsAsFactors=FALSE ... Вот что я получаю:

require(plyr) 

df1 <- data.frame(day=c('monday', 'tuesday'), week=c(47,48), stringsAsFactors = TRUE) 
df2 <- data.frame(day=c('monday', 'tuesday'), week=c(47,48), stringsAsFactors = FALSE) 


ddply(df1, .(day), transform, 
    b = ifelse(week==47, week, day) 
) 

#  day week b 
# 1 monday 47 47 
# 2 tuesday 48 2 


ddply(df2, .(day), transform, 
    b = ifelse(week==47, week, day) 
) 

#  day week  b 
# 1 monday 47  47 
# 2 tuesday 48 tuesday 

Вы бы получить то же самое, если вы преобразовали фактор df1 таким образом:

df1$day <- as.character(df1$day) 
ddply(df1, .(day), transform, 
    b = ifelse(week==47, week, day) 
) 
#  day week  b 
# 1 monday 47  47 
# 2 tuesday 48 tuesday 
+0

Спасибо - это интересно, потому что у меня разные результаты, когда я запускаю ваши точный код. Когда я бег ddply на df2 я получаю: '# дня недели б # 1 понедельник 47 47 # 2 вторник 48 1' я получаю точно такой же результат, когда я конвертировать фактор в df1 тоже. Я использую {plyr} v 1.8.1 и Mac OS 10.9.5 – Rez99

+0

Хммм неловко .... когда вы просто печатаете 'df2', вы видите что-нибудь неожиданное? (btw Я использую R 3.1.2, plyr 1.8.1) –

+0

@akrun на самом деле я только что сделал в редактировании моего предыдущего комментария! –

Смежные вопросы