2015-06-28 5 views
2

Я пытаюсь создать id-макет в r. Ситуация немного сложная. Я хочу установить id1 = 1, если длина id = 15 и 0, если длина = 11 (это только два случая). Я попытался следующий код:

id1 <- ifelse(nchar(as.character(data$id) == "15"), 1,0) 

код может работать, но когда я смотрю на данных, которые я нашел все значение генерируемого 1, а не 0,1. Другими словами, я сомневаюсь, что что-то пошло не так с настройкой функции ifelse.

Я также попытался это:

id1 <- factor(ifelse(nchar(as.character(data$id) == "15"), 1,0)) 

еще получил тот же результат.

Может ли кто-нибудь мне помочь в этом, пожалуйста?

Эти данные, как это:

id 
799679d656c 
032a71ce6132f38 
b89602494f78508 
c817fdde8fd 
74e69d6b574 
37d4c1ad5e56d06 
63d89a0171f 
c8bdb87cd537472 
bdc09ee5421b1ec 
967f47694e6 
e4d825005b1 
0eb6b851bba 
9b27fa6949aaa42 
bc82516f141 
c4c7f10be01 
cb90e05f8a4 
cb45e5a890e 
a93f57b965d78eb 
5e3bb4f29457d75 
62aa2cb20a30e07 
33e8f2cd8bd 
fdecbac8b827917 
b51ea777c53d720 
+4

mabybe сво неуместны кронштейн .. 'IfElse (NCHAR (as.character (данные $ ID)) == 15, 1,0)' – user20650

+0

Для этого, вы не нужно 'ifelse'' as.integer (nchar (as.c haracter (df1 $ id)) == '15') ' – akrun

+1

Или еще больше кода для игры в гольф' + (nchar (as.character (data $ id)) == 15) ' –

ответ

3

без явного ifelse заявления:

id1 <- (nchar(as.character(data$id)) == 15)+0L 

Это работает, потому что благодаря краткости R кода, оператор сравнения == проверяет равенство две стороны без использования, если, или иначе. Оператор if подразумевается в тесте, заменяя потенциально многословную задачу программирования на одно сжатое исполнение в R. (credit @DavidArenburg для нулевого добавления)

Прямое исправление вашего кода, упомянутого в комментариях пользователя20650:

id1 <- ifelse(nchar(as.character(data$id)) == 15, 1,0) 

Результаты

id1 
#[1] 0 1 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 1 1 1 0 1 1 
+0

Спасибо за помощь. Я попробовал это, но получил следующую ошибку: Ошибка в nchar (data $ id): 'nchar()' требует символьного вектора – cat88

+1

параметр 'stringsAsFactors' должен быть установлен в FALSE при создании фрейма данных. –

+0

Если вы не можете этого сделать, это также работает с данными $ id <- as.character (data $ id) ' –