2015-07-24 3 views
1

Я не могу понять, что я делаю неправильно. Я пытаюсь переупорядочить строку, и самый простой способ, который я мог придумать, - удалить элементы, а затем вернуть их обратно с помощью пасты. Но я не могу понять, как удалить элементы. Вот строка:Переупорядочить строку в R, используя splitstring

x <- "the.cow.goes.moo" 

Но когда я использую

x <- strsplit(x, '[.]') 

в результате список «» «корова» «идет» «мычание». И попытаться удалить второй элемент, используя либо

x <- x[-2] 

или

[x <- x[x != "cow"] 

Я получаю тот же список. Но, когда я объявляю х в качестве

x <- list("the", "cow", "goes", "moo") 

затем

x <- x[-2] 

работ!

Что поделаешь? Что я делаю не так? Кроме того, есть ли более простой способ изменить порядок строк?

EDIT: Я только что понял, что мне нужно «moo.goes.the.cow», но мне нужно повторить это же изменение для ряда других строк. Поэтому мне нужно изменить порядок элементов и не удалять их. Как я могу это сделать?

+0

'паста (strsplit (x, '.', fixed = T) [[1]] [c (4,3,1,2)], collapse = '.') ' – hwnd

ответ

1

strsplit возвращает list объект. Поэтому каждый элемент вектора x теперь будет разбит на отдельные части в list. Списки могут быть болезненными для подмножества таким образом, но хорошо разорвать голову.

В вашем примере это будет:

x[[1]][-2] 

Для вашего обновления, вы можете изменить порядок так:

x[[1]][c(2,1,3,4)] # or whatever order you want. 
x[[1]][sample(1:x[[1]],length(x[[1]]))] # randomly even 
+0

Это сработало! Спасибо! Что означает '[[1]]'? – mlinegar

+0

Это первый элемент списка. Он использует несколько отличную нотацию, чем вектор. Второй элемент списка, вы догадались, это '[[2]]'. Именованный список? '[[" list_element_name "]]' –

+0

Итак, список в основном вектор векторов? – mlinegar

0

Добавьте эту строку

x<-unlist(x) 
x <- x[-2] 
Смежные вопросы