Использование Regex для редактирования столбца в R [duplicate]

Убедитесь, что вы не закрываете базу данных. Используя db_close () перед запуском вашего запроса:

Если вы используете несколько запросов в скрипте, даже если вы включая другие страницы, содержащие запросы или соединение с базой данных, возможно, что в любом месте вы будете использовать db_close (), который закроет ваше соединение с базой данных, поэтому убедитесь, что вы не делаете эту ошибку в своих сценариях.

13
задан Rich Scriven 13 November 2015 в 01:56
поделиться

4 ответа

Если вам нужно извлечь первую (или nth) запись из каждого разделения, используйте:

word <- c('apple-orange-strawberry','chocolate')

sapply(strsplit(word,"-"), `[`, 1)
#[1] "apple"     "chocolate"

Или быстрее и более эксплицитно:

vapply(strsplit(word,"-"), `[`, 1, FUN.VALUE=character(1))
#[1] "apple"     "chocolate"

Оба бит кода хорошо справится с выбором какого-либо значения в списке split и будет обрабатывать случаи, выходящие за пределы диапазона:

vapply(strsplit(word,"-"), `[`, 2, FUN.VALUE=character(1))
#[1] "orange" NA  
17
ответ дан thelatemail 24 August 2018 в 08:02
поделиться

Например,

word <- 'apple-orange-strawberry'

strsplit(word, "-")[[1]][1]
[1] "apple"

или, что эквивалентно

unlist(strsplit(word, "-"))[1].

По сути, идея состоит в том, что split дает список в результате, к элементам которого нужно обращаться либо (в последнем случае) или путем исключения (последний).

Если вы хотите применить метод ко всему столбцу:

first.word <- function(my.string){
    unlist(strsplit(my.string, "-"))[1]
}

words <- c('apple-orange-strawberry', 'orange-juice')

R: sapply(words, first.word)
apple-orange-strawberry            orange-juice 
                "apple"                "orange"
13
ответ дан gented 24 August 2018 в 08:02
поделиться

Вместо этого я использовал бы sub(). Поскольку вам нужно первое «слово» перед расколом, мы можем просто удалить все после первого -, и это то, с чем мы остались.

sub("-.*", "", people$food)

Вот пример -

x <- c("apple", "banana-raspberry-cherry", "orange-berry", "tomato-apple")
sub("-.*", "", x)
# [1] "apple"  "banana" "orange" "tomato"

В противном случае, если вы хотите использовать strsplit(), вы можете округлить первые элементы с помощью vapply()

vapply(strsplit(x, "-", fixed = TRUE), "[", "", 1)
# [1] "apple"  "banana" "orange" "tomato"
3
ответ дан Rich Scriven 24 August 2018 в 08:02
поделиться

Я бы предложил использовать head, а не [ в R.

word <- c('apple-orange-strawberry','chocolate')
sapply(strsplit(word, "-"), head, 1)
# [1] "apple"     "chocolate"
2
ответ дан Ven Yao 24 August 2018 в 08:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: