我有一个data.frame
x
格式如下:
species site count
1: A 1.1 25
2: A 1.2 1152
3: A 2.1 26
4: A 3.5 1
5: A 3.7 98
---
101: B 1.2 6
102: B 1.3 10
103: B 2.1 8
104: B 2.2 8
105: B 2.3 5
我还有另一个data.frame
area
格式如下:
species area
1: A 59.7
2: B 34.4
3: C 37.7
4: D 22.8
我想划分count
的列data.frame
x
通过值area
column data.frame
area
当每个的物种列中的值data.frame
match
我一直在努力让它与ddply
功能:
density = ddply(x, "species", mutate, density = x$count/area[,2]
但我无法弄清楚正确的索引语法area[]
调用以仅选择与中找到的值匹配的行x$species
。然而,我对这个非常陌生plyr
包(和apply*
函数作为一个整体)所以这可能是完全错误的方法
我希望能返回一个data.frame
以下格式:
species site count density
1: A 1.1 25 0.419
2: A 1.2 152 2.546
3: A 2.1 26 0.436
4: A 3.5 1 0.017
5: A 3.7 98 1.641
---
101: B 1.2 6 0.174
102: B 1.3 10 0.291
103: B 2.1 8 0.233
104: B 2.2 8 0.233
105: B 2.3 5 0.145
这很容易data.table
:
library(data.table)
#converting your data to the native type for the package (by reference)
setDT(x); setDT(area)
x[area, density:=count/i.area, on="species"]
:=
是添加列的自然方式data.table
(引用, see this https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-reference-semantics.html小插图,特别是 b) 点,了解更多有关此内容及其重要性的信息),所以x:=y
添加一个名为x
给你的data.table
并为其赋值y
.
合并表单时X[Y,]
,我们可以想到Y
作为选择的行X
进行操作;进一步,当Y
is a data.table
,两者中的所有对象X
and Y
可以在j
(即逗号后面的内容),所以我们可以说density:=count/area
;当我们想要成为sure我们指的是其中之一Y
的列,我们在其名称前面加上i.
这样我们就知道我们指的是其中的一列i
,即逗号之前的内容。合并时应该有一个小插图即将推出 https://github.com/Rdatatable/data.table/issues/944.
一般来说,一旦您想到“跨不同数据集匹配”,您的直觉应该是合并。更多关于data.table
, see here https://github.com/Rdatatable/data.table/wiki/Getting-started.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)