首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R merge命令返回列表,而不是数据帧

R merge命令返回列表,而不是数据帧
EN

Stack Overflow用户
提问于 2020-03-14 00:18:56
回答 1查看 38关注 0票数 0

昨天merge继续返回列表,而不是数据框,将列表中的每一列分离为单独的元素。当我从plyr尝试join命令时,它使我的所有非join by列在每一行中都具有完全相同的值。今天merge命令起作用了,但我担心这种情况会再次发生。我不知道该怎么解决它。有人听说过这个问题吗?编辑:它不再工作了。

我正在尝试使用merge命令合并2个数据帧。数据框是tab2和tab 4,它们都有4个共同的列,我尝试通过它们来合并。Tab2有一个额外的列col5,而tab4有几个额外的列,名为sum1,...sum7。

此命令:

代码语言:javascript
复制
temp <- merge(tab2, tab4, by = c("year", "month", "n_make", "n_mod"), all = TRUE, sort = FALSE)

产生错误: Error in merge(tab2,tab4,by = c("year","month","n_make","n_mod"),:未使用的参数(by = c("year","month","n_make","n_mod"),all = TRUE,sort = FALSE)

当我去掉"by“部分时,错误是一样的,只是提到了"all”和"sort“部分。当我去掉全部和排序部分时:

代码语言:javascript
复制
tmp <- merge(tab2, tab4)

命令通过了,但它没有给我一个数据框,而是给了我一个列表,其中第一个元素是来自tab2的col_5列,它的元素数和tab2的行数一样多。其他条目是以我的所有其他列命名的,包括merge by columns,它们只有和tab4一样多的条目。

我真的很感谢人们在这个问题上给我的任何信息。我不能冒险让它再次发生。我正在写的代码必须与工作中的其他代码相结合,并将至少每月运行一次,所以我需要它一直工作。

以下是join命令,该命令也不起作用:

代码语言:javascript
复制
library(plyr)
tmp <- join(tab2, tab4, type = "full")

编辑:可重现的示例由于数据是专有的,我重写了一个小示例,但它仍然不起作用。我包含了我包含的包,以防其中一个包搞砸了:

代码语言:javascript
复制
library(RODBC)
library(RPostgres)              
library(DBI)
library(RPostgreSQL)
library(installr)
library(devtools)
library(remotes)
library(dbplyr)
library(dplyr)
# library(dbplot)   # not avaiable for R version 3.6.2
library(ggplot2)
library(modeldb)
library(tidypredict)
library(config)
library(inspectdf)
library(vcdExtra)
library(vcd)
library(janitor)
library(plyr)
library(openintro)
library(lattice)

year = c(2015, 2015, 2015, 2016, 2016, 2016, 2017, 2017, 2017, 2018, 2018, 2018, 2019, 2019, 2019)
month = c(1, 1, 3, 1, 2, 2, 1, 2, 3, 1, 2, 3, 2, 2, 3)
n_make = c("A", "B", "A", "A", "A", "B", "A", "B", "C", "A", "B", "C", "B", "C", "C")
n_mod = c(7, 8, 7, 7, 9, 8, 7, 8, 6, 7, 8, 6, 8, 6, 5)
col5 = c(24, 38, 92, 41, 63, 19, 14, 8, 56, 73, 80, 13, 21, 42, 66)
t2 <-data.frame(year, month, n_make, n_mod, col5)
head(t2, 15)


year = c(2015, 2015, 2015, 2015, 2016, 2016, 2017, 2017, 2018, 2018, 2019, 2019, 2019, 2000)
month = c(1, 1, 1, 3, 1, 2, 2, 3, 1, 2, 1, 2, 2, 1)
n_make = c("A", "B", "C", "A", "A", "A", "B", "C", "A", "B", "B", "B", "C", "C")
n_mod = c(7, 8, 6, 7, 7, 9, 8, 6, 7, 8,  8, 8, 6, 5)
x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
y = c(14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
t4 <- data.frame(year, month, n_make, n_mod, x, y)
head(t4, 14)

# This is producing error messages.
t <- merge(t2, t4, by = c("year", "month", "n_make", "n_mod"), all = TRUE, sort = FALSE) 
t

#This is producing a regular list instead of a dataframe.
t <- merge(t2, t4)
t
EN

回答 1

Stack Overflow用户

发布于 2020-03-14 04:34:21

我相信配置包屏蔽了基本的merge命令。通过擦除所有输出并重新启动R并将该包注释掉,合并命令现在可以工作了。

这很有趣,因为我尝试了base::merge,以防屏蔽是问题所在,但这不起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60673910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档