Поиск значений в именованном списке для замены в другом именованном списке в R

При использовании Boost Tokenizer escaped_list_separator для CSV-файлов следует знать следующее:

  1. Для этого требуется escape-символ (по умолчанию back-slash - \)
  2. Для этого требуется разделитель / разделитель-символ (по умолчанию запятая,)
  3. Для этого требуется котировочный символ (по умолчанию quote - ")

Формат CSV указанный в wiki, указывает, что поля данных могут содержать разделители в кавычках (поддерживается):

1997, Ford, E350, «Супер, роскошный грузовик»

Формат CSV, указанный wiki, указывает, что одинарные кавычки должны обрабатываться с помощью двух кавычек (escaped_list_separator удалит все символы кавычек):

1997, Ford, E350, «Супер» «роскошный» грузовик "

Формат CSV не указывает, что любые символы обратной косой черты должны быть удалены (escaped_list_separator удалит все escape-символы).

вокруг, чтобы исправить поведение по умолчанию для повышения e scaped_list_separator:

  1. Сначала замените все символы обратной косой черты (\) двумя символами обратной косой черты (\\), чтобы они не были удалены.
  2. Во-вторых, замените все двойные -quotes ("") с одним символом обратной косой черты и цитатой (\ ")

Эта обходная ситуация имеет побочный эффект, что пустые поля данных, которые представлены двойная кавычка, преобразуется в одноточечный токен. При повторении через токены, нужно проверить, является ли токен одиночной кавычкой, и рассматривать его как пустую строку.

Не очень, но он работает, пока в кавычках нет новых строк.

1
задан markus 19 February 2019 в 19:35
поделиться

2 ответа

Вы можете сделать это с помощью базы R и функции mapply, предполагая, что списки находятся в одном и том же порядке

mapply(function(a,b) a[b], mylist, myanswers)

. Если это не так, вы можете Map использовать имена

. ]
Map(function(x) {
    mylist[[x]][[myanswers[[x]]]]
}, names(myanswers))
0
ответ дан MrFlick 19 February 2019 в 19:35
поделиться

Еще один вариант, когда вы сначала создаете таблицу соответствия

(lookup <- do.call(rbind, lapply(mylist, stack)))
#    values ind
#a.1    Yes  AA
#a.2     No  AB
#a.3  Maybe  AC
#b.1    Yes  BA
#b.2     No  BB
#b.3  Maybe  BC

, а затем используете lapply и match для замены

lapply(myanswers, function(x) lookup$values[match(x, lookup$ind)])
#$a
#[1] "Yes"
#
#$b
#[1] "Maybe"
0
ответ дан markus 19 February 2019 в 19:35
поделиться
Другие вопросы по тегам:

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