【问题标题】:How to merge dataframes ? Error in UseMethod("tbl_vars") : no applicable method for 'tbl_vars' applied to an object of class "list"如何合并数据框? UseMethod(“tbl_vars”)中的错误:没有适用于“tbl_vars”的方法应用于“list”类的对象
【发布时间】:2020-06-18 11:49:14
【问题描述】:

我正在尝试合并两个数据框,一个包含日期、作者、论文和 ID 等变量,另一个包含文本及其 ID。 我补充说,因为它可能有一些重要性,包含文本的数据帧是通过使用以下代码将 Vcor​​pus 转换为数据帧获得的:

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() 需要错误,所以我将函数应用于它们,但我一直收到相同的错误。

这是我的第一个数据帧 corpusVars 的头部的 dput:

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"))

这是第二个数据框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"))

您知道如何合并这些数据帧而不会出现此错误吗?

提前谢谢你!

编辑:

当使用 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 打开时,这里是 corpusVars 头部的 dput 的一个子集:

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")

【问题讨论】:

  • 你试过merge吗?
  • 我猜这个.internal.selfref = &lt;pointer: 0x0000024403b11ef0&gt;,不应该包含在数据中?
  • 有,但是不知道为什么会存在,怎么删除
  • @ChrisRuehlemann 是的,我得到一张有 5 个 obs 的桌子。 0 个变量,“表中没有可用数据”。我猜是因为 .internal.selfref = &lt;pointer: 0x0000024403b11ef0&gt; ,但我不知道为什么会存在
  • 好吧,不知道你有什么数据,如果我是你,我会怎么做是将整个 .csv 文件复制并粘贴到某个 .txt 编辑器中,将其另存为 .txt 并读入使用read.table;此外,您可能需要尝试将参数调整为read.table,查看?read.table

标签: r dataframe dplyr


【解决方案1】:

您的阅读功能似乎有问题。

输出不是一个普通的数据框对象,而是某种只包含一个数据框对象的列表。

确实,这条线似乎有效,并给出了适当的合并数据框:

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

值得注意的是,正如 Chris 所说,.internal.selfref = &lt;pointer: 0x0000024403b11ef0&gt; 不应包含在内,我必须将其从您的 dput 输出中删除才能使示例正常工作。这确实似乎与fread 有关: Warning: 'Invalid .internal.selfref detected' when adding a column to a data.table returned from a function

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2019-09-12
    • 2018-11-02
    • 2022-12-15
    相关资源
    最近更新 更多