как разбить вектор со смешанными переменными на два отдельных вектора в R

Я извлек смешанную переменную, которая включает в себя как числовые, так и строковые значения из файла данных, используя функцию strsplit. Я получил переменную, как показано ниже:

> sample3

[[1]]
[1] "1200" "A"  

[[2]]
[1] "1193" "A"  

[[3]]
[1] "1117" "B"  

[[4]]
[1] "5663" 

[[5]]
[1] "7003" "C" 

[[6]]
[1] "1205" "A"  

[[7]]
[1] "2100" "D"  

[[8]]
[1] "1000" "D"  

[[9]]
[1]  "D" 

[[10]]
[1] "1000" "B"

Мне нужно разделить это на две переменные/векторы (или преобразовать в матрицу с двумя столбцами). Я попытался использовать код unlist(sample3), а затем поместить все значения в матрицу с ncol=2, однако, поскольку есть некоторые отсутствующие точки данных, результат неверен, когда я использую этот способ. Я думаю, что мне нужно решить проблему с отсутствующими данными, прежде чем помещать в матрицу с двумя столбцами. У кого-нибудь есть идеи по этому вопросу? Любая помощь будет оценена.


person John Smith    schedule 14.11.2012    source источник


Ответы (1)


Что-то вроде этого будет работать

# dummy data
x <- list(c('100','a'), '100', c('a'), c('1000','b'))

numeric_x <- unlist(lapply(x,function(x) {.x <- head(x,1); as.numeric(.x)}))

character_x <- unlist(lapply(x,function(x) {.x <- tail(x,1); if(is.na(as.numeric(.x))) {return(.x)} else {return(NA)}}))

Я уверен, что будет гораздо более приятный ответ регулярного выражения

person mnel    schedule 14.11.2012
comment
Я думаю, что в этом коде есть некоторые ошибки, потому что когда я применяю его, R выдает некоторые предупреждения, такие как NA, введенные принуждением. Не могли бы вы перепроверить это или я что-то упустил? - person John Smith; 14.11.2012
comment
Он выдаст эти предупреждения, поскольку он полагается на принуждение к числовому значению, а затем находит значения NA (именно то, что предупреждение говорит вам, что оно делает - person mnel; 14.11.2012
comment
Упс! Я не проверял переменные после применения вашего кода. Переменные казались правильными, даже R дает ошибки;) Еще раз спасибо за ваше время и помощь. - person John Smith; 14.11.2012