在R中合并两个数据框后,显示<0行>(或0长度行名称)。

3
我正在Code School学习R语言,目前在做第六章的问题。无论我在那里学到什么,我都会在我的桌面上脱机练习。
现在,我遇到的问题似乎非常简单,但我找不到任何简单的答案。
在这一章中,我们介绍了两个数据集。两个数据集都有相同的四个端口。
第一个数据集名为“Targets”,有三列(“端口”,“人口”和“价值”)。
Port    Population  Worth
Cartagena    35000  10000
Porto Bello  49000  15000
Havana      140000  50000
Panama City 105000  35000

第二个数据集名为“Infantry”,有两列(“Port”和“Infantry”)。
Port        Infantry
Porto Bello      700
Cartagena        500
Panama City     1500
Havana          2000

两个数据集保存在两个单独的CSV文件中。现在在加载它们之后。
Targets = read.csv(file.choose()) 
Infantry = read.csv(file.choose()

每当我尝试通过输入来合并它们时

merge(Targets,Infantry)

结果显示:
[1] Port       Population Worth      Infantry  
<0 rows> (or 0-length row.names)

由于缺少可重现的示例,您希望获得什么类型的帮助? - www
2
没有数据集,没有代码,输出格式也很糟糕。如果我像你一样写一篇文章,只是描述我遇到的问题,你愿意帮助我吗? - www
您需要将输入缩进4次以在代码块内显示它。以表格格式展示实际外观的示例行和列。同样适用于您的合并代码。查看其他得票最高的R问题是如何提问的。 - Cybernetic
@St.Lazarus;您能否编辑您的问题,附上dput(head(Targets))dput(head(Infantry))的结果。 - user20650
检查“端口”列中是否有任何前导/后置空格,即Targets$Port <- trimws(Targets$Port); Infantry$Port <- trimws(Infantry$Port),然后执行merge。根据您所展示的内容,它应该正确地合并。 - akrun
显示剩余4条评论
1个回答

1

当从您的示例创建一些虚拟数据时,合并函数运行良好。

  Targets <- data.frame(
  Port=c("Cartagena", "Porto Bello"),
  Population=c(35000, 49000),
  Worth=c(10000, 15000))

Infantry <- data.frame(
  Port=c("Porto Bello", "Cartagena"), 
  Infantry=c(700, 500))

merge(Targets,Infantry)

你能检查一下read.csv函数是否正确上传文件吗?你可能需要在read.csv函数中更改sep参数或在合并函数的by.xby.y中进行更改。


检查“端口”列中是否有任何前导/后置空格,即Targets $ Port <- trimws(Targets $ Port); Infantry $ Port <- trimws(Infantry $ Port),然后进行合并。根据您展示的内容,它应该正确地合并- akrun 20分钟前 - St. Lazarus
我猜问题是因为前导/后置空格的原因。现在它可以工作了。不管怎样,还是谢谢 :) - St. Lazarus
1
SeGa,虽然与此无关,但最好不要使用data.frame(cbind(..)),因为它会将所有列强制转换为字符,然后转换为因子(请参见str(Targets)),包括应该是数字的列。只需使用data.frame(...)即可。 - user20650

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接