Как объединить данные? Ошибка в UseMethod ("tbl_vars"): нет применимого метода для 'tbl_vars', примененного к объекту класса "list" - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь объединить два фрейма данных, один из которых содержит переменные, такие как Дата, Автор, Бумага и идентификаторы, а другой содержит тексты и их идентификаторы. Я добавляю, потому что это может иметь какое-то значение, чтобы кадр данных, содержащий тексты, был получен путем преобразования Vcorpus в кадр данных со следующим кодом:

factivadf <- data.frame(text=unlist(sapply(corpus, `[`, "content")), stringsAsFactors=F)

Чтобы выполнить объединение, я использую следующий код :

factivaclean <- full_join(corpusVars, factiva, by = "doc_id")

И я получаю следующую ошибку:

Error in UseMethod("tbl_vars") : no applicable method for 'tbl_vars' applied to an object of class "list"

Мои два исходных кадра данных были обычными, и я сначала подумал, что ошибка требуется для применения tibble(), поэтому Я применил к ним функцию, но продолжаю получать ту же ошибку.

Вот dput заголовка моего первого кадра данных, corpusVars:

structure(list(corpusVars = structure(list(doc_id = c("LEPARI0020120304e833000v5", 
"HUMAN00020120301e8320001e", "LACRX00020120228e82s00017", "HUMAN00020120223e82o0001h", 
"HUMAN00020120223e82o0001g", "HUMAN00020120223e82o0000n"), Origine = c("Le Parisien-Aujourd'hui en France", 
"L'Humanité", "La Croix", "L'Humanité", "L'Humanité", "L'Humanité"
), Date = structure(c(15402, 15401, 15398, 15394, 15394, 15394
), class = "Date"), Auteur = c(NA, NA, NA, "Entretien réalisé par <U+2028>Fara C", 
"V. H.", NA)), .internal.selfref = <pointer: 0x0000024403b11ef0>, row.names = c(NA, 
6L), class = c("data.table", "data.frame"))), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

Вот dput второго кадра данных, factivadf:

structure(list(factivadf = structure(list(doc_id = c("ECHOS00020110523e75n0004j.content", 
"ECHOS00020110525e75p0000o.content1", "ECHOS00020110525e75p0000o.content2", 
"ECHOS00020110525e75p0000o.content3", "ECHOS00020110525e75p0000o.content4", 
"ECHOS00020110530e75u00019.content1"), text = c("Environ 500 personnes s'étaient donné rendez-vous hier devant le Centre Georges-Pompidou pour condamner le « sexisme » exprimé par de nombreux responsables politiques et médiatiques autour de l'affaire DSK. Une initiative portée notamment par les associations Paroles de femmes et Osez le féminisme, qui ont rappelé que 75.000 femmes sont chaque année en France victimes de viol.", 
"Le propos. La collection « Les 50 grandes idées que vous devez connaître » s'enrichit d'un nouveau titre, signé par un enseignant britannique de littérature qui se consacre maintenant à la vulgarisation des savoirs. Comme dans un dictionnaire de science politique (mais sans pontifier, ni tourner des pages autour du pot), 50 entrées promènent le lecteur de la théorie politique (liberté, égalité, tyrannie, utopie, etc.) aux matières de la politique (pauvreté, sécurité, racisme, corruption, etc.) en passant par les idéologies (anarchisme, capitalisme, socialisme, multiculturalisme, féminisme, etc.). Un petit glossaire complète le tout, avec de rapides définitions, qui auraient pu aussi constituer des idées à développer (laisser-faire, lobbying, réforme, etc.).", 
"Conçu comme un outil agréable de travail, ce livre original dispose d'un index permettant de retrouver nombre de personnages (Nicolas Sarkozy, Aristote, Aristide Briand ou bien encore la reine Victoria) à travers des pages dédiées aussi à la différence, la tyrannie, la laïcité ou le droit divin.", 
"L'intérêt. Mêlant citations et proverbes (plus ou moins célèbres), encadrés descriptifs, chronologies thématiques, tout en alternant ton sérieux (le plus souvent) et piques ironiques (voir la notice sur le politiquement correct), l'ouvrage permet, en se feuilletant, de passer un bon moment. Il a, au-delà, toute sa place dans une bibliothèque, à portée de main, pour une présentation rapide et claire de thèmes tout à fait sérieux.", 
"La citation.« La politique est supposée être la seconde plus vieille profession. J'ai fini par réaliser qu'elle ressemblait beaucoup à la première. » (Ronald Reagan)", 
"Le décret que prépare le gouvernement pour favoriser l'égalité salariale entre les hommes et les femmes est violemment critiqué par les syndicats, ce qui est courant, mais aussi par une partie de la majorité, ce qui l'est moins. Députée UMP et présidente de la délégation aux droits des femmes de l'Assemblée nationale, Marie-Jo Zimmermann ne mâche pas ses mots. « Ce décret, c'est de l'eau tiède, il ne réglera rien au problème», assure-t-elle."
)), .internal.selfref = <pointer: 0x0000024403b11ef0>, row.names = c(NA, 
6L), class = "data.frame")), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

Do Вы знаете, как объединить эти кадры данных без получения этой ошибки?

Заранее спасибо!

РЕДАКТИРОВАТЬ:

При открытии с помощью read.table("corpusVars.csv", header = TRUE, sep = ";", na.strings = " "), я получаю следующую ошибку (то же самое с другим файлом, просто инкриминируется другая строка):

Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
  line 102 did not have 4 elements

Когда он открывается с помощью read.csv2, здесь есть подмножество dput заголовка corpusVars:

structure(list(doc_id = structure(c(898L, 434L, 702L, 433L, 432L, 
431L), .Label = c("ECHOS00020110523e75n0004j", "ECHOS00020110525e75p0000o", 
"ECHOS00020110530e75u00019", "ECHOS00020110603e76300003", "ECHOS00020110615e76f0003l", 
"ECHOS00020110621e76l00021"), class = "factor"), 
    Origine = structure(c(5L, 1L, 2L, 1L, 1L, 1L), .Label = c("L'Humanité", 
    "La Croix", "La Tribune", "Le Figaro", "Le Parisien-Aujourd'hui en France", 
    "Les Echos"), class = "factor"), Date = structure(c(30L, 
    16L, 368L, 313L, 313L, 313L), .Label = c("01/02/2012", "01/02/2019", 
    "01/03/2019", "01/04/2019", "01/06/2011", "01/07/2011"), class = "factor"), 
    Auteur = structure(c(NA, NA, NA, 150L, 463L, NA), .Label = c("A.DA.", 
    "A.F.", "Adam Arroudj; 0", "Adèle Smith; adelesmith100@gmail.com", 
    "ADRIEN GOMBEAUD", "Adrien Jaulmes; ajaulmes@lefigaro.fr"), class = "factor")), row.names = c(NA, 
6L), class = "data.frame")

1 Ответ

1 голос
/ 06 марта 2020

Кажется, проблема в вашей функции чтения.

Вывод не является обычным объектом dataframe, а скорее чем-то вроде списка, содержащего только объект dataframe.

Действительно, это Кажется, что строка работает и дает правильный объединенный фрейм данных:

full_join(corpusVars$corpusVars, factivadf$factivadf, by = "doc_id")

Следует отметить, что, как сказал Крис, .internal.selfref = <pointer: 0x0000024403b11ef0> не следует включать, и мне пришлось удалить его из вывода dput, например, для Работа. Похоже, это действительно связано с fread: Предупреждение: «Обнаружен неверный .internal.selfref» при добавлении столбца в таблицу data.table, возвращаемую из функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...