Как узнать максимальное число запятых в строке в одном столбце во фрейме данных в R? - PullRequest
0 голосов
/ 22 октября 2019

Я хочу узнать, какая максимальная сумма запятой появилась в строке в одном столбце.

Например,

     Cars
1    Bugatti (4)","Ferrari (7)","Audi (10)
2    Toyota (6)
3    Tesla (9)","Mercedes(8)
4    Suzuki (11)","Mitsubishi (19)","Ford (7)","BMW (6)

Для приведенного выше столбца таблицы максимальное число запятых в строке равно 3, и оно находится в строке 4. Как этого добитьсянамного более большие данные (4000+ строк)?

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Моя идея состоит в том, чтобы удалить не запятые символы и вычислить количество символов.

Я понятия не имею, какой класс объектов вы используете для cars. Предполагая, что вы вводите

cars <- c(' Bugatti (4)","Ferrari (7)","Audi (10)','Toyota (6)','Tesla (9)","Mercedes(8)','Suzuki (11)","Mitsubishi (19)","Ford (7)","BMW (6)')

, вы можете использовать nchar(gsub("[^,]","", cars)), чтобы получить количество запятых в каждой строке.

0 голосов
/ 22 октября 2019

Вы можете использовать gregexp(), чтобы вернуть вектор позиций запятой (ей) в каждой строке. Затем вы можете применить функцию length() для подсчета запятых:

sapply(gregexpr(",", df$cars), length)
## 2 1 1 3

Чтобы ответить на точный заданный вопрос, просто оберните указанную выше строку кода в max(), чтобы определить максимальное количество раззапятая появилась в одной из ваших строк.


Выше фактически возвращает «1», когда ожидается «0». Возможно, есть более элегантное решение, но вот функция, которая будет правильно обрабатывать нули:

count_commas <- function(x) {
    y <- sapply(gregexpr(",", x), as.integer) # get position of commas
    y <- lapply(y, function(y) if(y[1] == -1) NULL else y) # replace zeros
    return( sapply(y, length) ) # return count of commas
}

count_commas(df$cars)
# 2 0 1 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...