R:从树计数的数据框中制作几个表格
R: make several tables from data frame of tree counts
我的数据框 gpri.l 在 188 个点记录了树的胸径和状态。这是一个示例:
Point Species DBH..cm. Live.Dead Distance..m.
1 99 Ulmus.alata 12.6 L <NA>
2 100 Blank Blank Blank <NA>
3 101 Juniperus.virginiana 29.4 L <NA>
4 101 Juniperus.virginiana 15.6 L <NA>
5 101 Juniperus.virginiana 5.2 L <NA>
6 101 Ulmus.americana 8.8 L <NA>
7 101 Ulmus.americana 4.2 L <NA>
10 102 Carya.cordiformis 22.4 L <NA>
"Blank" 适用于没有树木的点。我想为每个点制作 table 个物种。第 99 点只有 Ulmus.alata,第 100 点有 1 个空白,第 101 点有 Juniperus.virginana - 3,Ulmus.americana - 2,等等。我可以用 struc[= 制作一个 table 28=],但它包含所有 37 个物种,包括每个点的 "Blank",因此 table 每个点都有很多零,因为平均点可能少于 6 个物种。我试过 plyr
中的函数,例如
library(plyr)
ddply(gpri.l,.(Point),table(Species))
# Error in table(Species) : object 'Species' not found
ddply(gpri.l,.(Point),table("Species"))
# Error in llply(.data = pieces, .fun = .fun, ..., .progress = .progress, :
# .fun is not a function.
我不知道为什么会出现这些错误。我也尝试了 dlply
函数,结果相同。
我似乎无法让 apply
和 table
一起工作。我试图考虑如何按点子集或拆分数据框,但在我看来,这将涉及编写某种循环。我花了一整天的时间尝试编写一个循环,但我什至无法获取点来填充设置为接收它们的向量。我非常感谢您在制作 table 方面提供的帮助。以及我的 plyr
错误的解释。
在 Henrik 回答后进行编辑--
@Henrik 我尝试了你的第一个建议,但它对我没有用,就像对你一样。您的评论显示了我一直在寻找的内容,但我已经复制并粘贴了它看起来像我的内容。
> h.h<-dlply(gpri.l, .(Point), function(x) table(x$Species))
> head(h.h)
我的数据框 gpri.l 在 188 个点记录了树的胸径和状态。这是一个示例:
Point Species DBH..cm. Live.Dead Distance..m.
1 99 Ulmus.alata 12.6 L <NA>
2 100 Blank Blank Blank <NA>
3 101 Juniperus.virginiana 29.4 L <NA>
4 101 Juniperus.virginiana 15.6 L <NA>
5 101 Juniperus.virginiana 5.2 L <NA>
6 101 Ulmus.americana 8.8 L <NA>
7 101 Ulmus.americana 4.2 L <NA>
10 102 Carya.cordiformis 22.4 L <NA>
"Blank" 适用于没有树木的点。我想为每个点制作 table 个物种。第 99 点只有 Ulmus.alata,第 100 点有 1 个空白,第 101 点有 Juniperus.virginana - 3,Ulmus.americana - 2,等等。我可以用 struc[= 制作一个 table 28=],但它包含所有 37 个物种,包括每个点的 "Blank",因此 table 每个点都有很多零,因为平均点可能少于 6 个物种。我试过 plyr
中的函数,例如
library(plyr)
ddply(gpri.l,.(Point),table(Species))
# Error in table(Species) : object 'Species' not found
ddply(gpri.l,.(Point),table("Species"))
# Error in llply(.data = pieces, .fun = .fun, ..., .progress = .progress, :
# .fun is not a function.
我不知道为什么会出现这些错误。我也尝试了 dlply
函数,结果相同。
我似乎无法让 apply
和 table
一起工作。我试图考虑如何按点子集或拆分数据框,但在我看来,这将涉及编写某种循环。我花了一整天的时间尝试编写一个循环,但我什至无法获取点来填充设置为接收它们的向量。我非常感谢您在制作 table 方面提供的帮助。以及我的 plyr
错误的解释。
在 Henrik 回答后进行编辑--
@Henrik 我尝试了你的第一个建议,但它对我没有用,就像对你一样。您的评论显示了我一直在寻找的内容,但我已经复制并粘贴了它看起来像我的内容。
99`
Blank Carya.cordiformis Carya.illinoisensis Carya.sp
0 0 0 0
Carya.texana Carya.tomentosa Celtis.laevigata Celtis.occidentalis
0 0 0 0
Celtis.sp. Cercis.canadensis Cornus.sp. Diospyros.virginiana
0 0 0 0
Fraxinus.pensylvanica Fraxinus.sp. Gleditsia.triacanthos Juglans.nigra
0 0 0 0
Juniperus.virginiana Maclura.pomifera Morus.sp Plantanus.occidentalis
0 0 0 0
Prunus.americana Prunus.serotina Prunus.sp. Quercus.macrocarpa
0 0 0 0
Quercus.marilandica Quercus.muhlenbergii Quercus.rubra Quercus.sp
0 0 0 0
Quercus.stellata Quercus.velutina Robinia.pseudoacacia Sapindus.saponaria
0 0 0 0
Sassafras Sideroxylon.lanigosa Ulmus.alata Ulmus.americana
0 0 1 0
我的数据框 gpri.l 在 188 个点记录了树的胸径和状态。这是一个示例:
Point Species DBH..cm. Live.Dead Distance..m.
1 99 Ulmus.alata 12.6 L <NA>
2 100 Blank Blank Blank <NA>
3 101 Juniperus.virginiana 29.4 L <NA>
4 101 Juniperus.virginiana 15.6 L <NA>
5 101 Juniperus.virginiana 5.2 L <NA>
6 101 Ulmus.americana 8.8 L <NA>
7 101 Ulmus.americana 4.2 L <NA>
10 102 Carya.cordiformis 22.4 L <NA>
"Blank" 适用于没有树木的点。我想为每个点制作 table 个物种。第 99 点只有 Ulmus.alata,第 100 点有 1 个空白,第 101 点有 Juniperus.virginana - 3,Ulmus.americana - 2,等等。我可以用 struc[= 制作一个 table 28=],但它包含所有 37 个物种,包括每个点的 "Blank",因此 table 每个点都有很多零,因为平均点可能少于 6 个物种。我试过 plyr
中的函数,例如
library(plyr)
ddply(gpri.l,.(Point),table(Species))
# Error in table(Species) : object 'Species' not found
ddply(gpri.l,.(Point),table("Species"))
# Error in llply(.data = pieces, .fun = .fun, ..., .progress = .progress, :
# .fun is not a function.
我不知道为什么会出现这些错误。我也尝试了 dlply
函数,结果相同。
我似乎无法让 apply
和 table
一起工作。我试图考虑如何按点子集或拆分数据框,但在我看来,这将涉及编写某种循环。我花了一整天的时间尝试编写一个循环,但我什至无法获取点来填充设置为接收它们的向量。我非常感谢您在制作 table 方面提供的帮助。以及我的 plyr
错误的解释。
在 Henrik 回答后进行编辑--
@Henrik 我尝试了你的第一个建议,但它对我没有用,就像对你一样。您的评论显示了我一直在寻找的内容,但我已经复制并粘贴了它看起来像我的内容。
100`
Blank Carya.cordiformis Carya.illinoisensis Carya.sp
1 0 0 0
Carya.texana Carya.tomentosa Celtis.laevigata Celtis.occidentalis
如果您希望 return 您的树在每个点都计数为 class table
,您需要将 dlply
与匿名函数一起使用。这将生成一个列表,每个点一个元素,每个元素包含一个 table:
dlply(df, .(Point), function(x) table(x$Species))
# $`99`
#
# Ulmus.alata
# 1
#
# $`100`
#
# Blank
# 1
#
# $`101`
#
# Juniperus.virginiana Ulmus.americana
# 3 2
#
# $`102`
# Carya.cordiformis
# 1
另一方面,如果您愿意将计数存储在数据框中(可能比table更容易使用),您可以使用ddply
和 summarise
;按 'Point' 和 'Species' 分组,并用 length
:
计算每个 'Species' 的计数
ddply(df, .(Point, Species), summarise, count = length(Species))
# Point Species count
# 1 99 Ulmus.alata 1
# 2 100 Blank 1
# 3 101 Juniperus.virginiana 3
# 4 101 Ulmus.americana 2
# 5 102 Carya.cordiformis 1
您还可以查看等效的 dplyr
代码:
library(dplyr)
df %>%
group_by(Point, Species) %>%
summarise(count = n())
# Point Species count
# 1 99 Ulmus.alata 1
# 2 100 Blank 1
# 3 101 Juniperus.virginiana 3
# 4 101 Ulmus.americana 2
# 5 102 Carya.cordiformis 1
我的数据框 gpri.l 在 188 个点记录了树的胸径和状态。这是一个示例:
Point Species DBH..cm. Live.Dead Distance..m.
1 99 Ulmus.alata 12.6 L <NA>
2 100 Blank Blank Blank <NA>
3 101 Juniperus.virginiana 29.4 L <NA>
4 101 Juniperus.virginiana 15.6 L <NA>
5 101 Juniperus.virginiana 5.2 L <NA>
6 101 Ulmus.americana 8.8 L <NA>
7 101 Ulmus.americana 4.2 L <NA>
10 102 Carya.cordiformis 22.4 L <NA>
"Blank" 适用于没有树木的点。我想为每个点制作 table 个物种。第 99 点只有 Ulmus.alata,第 100 点有 1 个空白,第 101 点有 Juniperus.virginana - 3,Ulmus.americana - 2,等等。我可以用 struc[= 制作一个 table 28=],但它包含所有 37 个物种,包括每个点的 "Blank",因此 table 每个点都有很多零,因为平均点可能少于 6 个物种。我试过 plyr
中的函数,例如
library(plyr)
ddply(gpri.l,.(Point),table(Species))
# Error in table(Species) : object 'Species' not found
ddply(gpri.l,.(Point),table("Species"))
# Error in llply(.data = pieces, .fun = .fun, ..., .progress = .progress, :
# .fun is not a function.
我不知道为什么会出现这些错误。我也尝试了 dlply
函数,结果相同。
我似乎无法让 apply
和 table
一起工作。我试图考虑如何按点子集或拆分数据框,但在我看来,这将涉及编写某种循环。我花了一整天的时间尝试编写一个循环,但我什至无法获取点来填充设置为接收它们的向量。我非常感谢您在制作 table 方面提供的帮助。以及我的 plyr
错误的解释。
在 Henrik 回答后进行编辑--
@Henrik 我尝试了你的第一个建议,但它对我没有用,就像对你一样。您的评论显示了我一直在寻找的内容,但我已经复制并粘贴了它看起来像我的内容。
> h.h<-dlply(gpri.l, .(Point), function(x) table(x$Species))
> head(h.h)
我的数据框 gpri.l 在 188 个点记录了树的胸径和状态。这是一个示例:
Point Species DBH..cm. Live.Dead Distance..m.
1 99 Ulmus.alata 12.6 L <NA>
2 100 Blank Blank Blank <NA>
3 101 Juniperus.virginiana 29.4 L <NA>
4 101 Juniperus.virginiana 15.6 L <NA>
5 101 Juniperus.virginiana 5.2 L <NA>
6 101 Ulmus.americana 8.8 L <NA>
7 101 Ulmus.americana 4.2 L <NA>
10 102 Carya.cordiformis 22.4 L <NA>
"Blank" 适用于没有树木的点。我想为每个点制作 table 个物种。第 99 点只有 Ulmus.alata,第 100 点有 1 个空白,第 101 点有 Juniperus.virginana - 3,Ulmus.americana - 2,等等。我可以用 struc[= 制作一个 table 28=],但它包含所有 37 个物种,包括每个点的 "Blank",因此 table 每个点都有很多零,因为平均点可能少于 6 个物种。我试过 plyr
中的函数,例如
library(plyr)
ddply(gpri.l,.(Point),table(Species))
# Error in table(Species) : object 'Species' not found
ddply(gpri.l,.(Point),table("Species"))
# Error in llply(.data = pieces, .fun = .fun, ..., .progress = .progress, :
# .fun is not a function.
我不知道为什么会出现这些错误。我也尝试了 dlply
函数,结果相同。
我似乎无法让 apply
和 table
一起工作。我试图考虑如何按点子集或拆分数据框,但在我看来,这将涉及编写某种循环。我花了一整天的时间尝试编写一个循环,但我什至无法获取点来填充设置为接收它们的向量。我非常感谢您在制作 table 方面提供的帮助。以及我的 plyr
错误的解释。
在 Henrik 回答后进行编辑--
@Henrik 我尝试了你的第一个建议,但它对我没有用,就像对你一样。您的评论显示了我一直在寻找的内容,但我已经复制并粘贴了它看起来像我的内容。
99`
Blank Carya.cordiformis Carya.illinoisensis Carya.sp
0 0 0 0
Carya.texana Carya.tomentosa Celtis.laevigata Celtis.occidentalis
0 0 0 0
Celtis.sp. Cercis.canadensis Cornus.sp. Diospyros.virginiana
0 0 0 0
Fraxinus.pensylvanica Fraxinus.sp. Gleditsia.triacanthos Juglans.nigra
0 0 0 0
Juniperus.virginiana Maclura.pomifera Morus.sp Plantanus.occidentalis
0 0 0 0
Prunus.americana Prunus.serotina Prunus.sp. Quercus.macrocarpa
0 0 0 0
Quercus.marilandica Quercus.muhlenbergii Quercus.rubra Quercus.sp
0 0 0 0
Quercus.stellata Quercus.velutina Robinia.pseudoacacia Sapindus.saponaria
0 0 0 0
Sassafras Sideroxylon.lanigosa Ulmus.alata Ulmus.americana
0 0 1 0
我的数据框 gpri.l 在 188 个点记录了树的胸径和状态。这是一个示例:
Point Species DBH..cm. Live.Dead Distance..m.
1 99 Ulmus.alata 12.6 L <NA>
2 100 Blank Blank Blank <NA>
3 101 Juniperus.virginiana 29.4 L <NA>
4 101 Juniperus.virginiana 15.6 L <NA>
5 101 Juniperus.virginiana 5.2 L <NA>
6 101 Ulmus.americana 8.8 L <NA>
7 101 Ulmus.americana 4.2 L <NA>
10 102 Carya.cordiformis 22.4 L <NA>
"Blank" 适用于没有树木的点。我想为每个点制作 table 个物种。第 99 点只有 Ulmus.alata,第 100 点有 1 个空白,第 101 点有 Juniperus.virginana - 3,Ulmus.americana - 2,等等。我可以用 struc[= 制作一个 table 28=],但它包含所有 37 个物种,包括每个点的 "Blank",因此 table 每个点都有很多零,因为平均点可能少于 6 个物种。我试过 plyr
中的函数,例如
library(plyr)
ddply(gpri.l,.(Point),table(Species))
# Error in table(Species) : object 'Species' not found
ddply(gpri.l,.(Point),table("Species"))
# Error in llply(.data = pieces, .fun = .fun, ..., .progress = .progress, :
# .fun is not a function.
我不知道为什么会出现这些错误。我也尝试了 dlply
函数,结果相同。
我似乎无法让 apply
和 table
一起工作。我试图考虑如何按点子集或拆分数据框,但在我看来,这将涉及编写某种循环。我花了一整天的时间尝试编写一个循环,但我什至无法获取点来填充设置为接收它们的向量。我非常感谢您在制作 table 方面提供的帮助。以及我的 plyr
错误的解释。
在 Henrik 回答后进行编辑--
@Henrik 我尝试了你的第一个建议,但它对我没有用,就像对你一样。您的评论显示了我一直在寻找的内容,但我已经复制并粘贴了它看起来像我的内容。
100`
Blank Carya.cordiformis Carya.illinoisensis Carya.sp
1 0 0 0
Carya.texana Carya.tomentosa Celtis.laevigata Celtis.occidentalis
如果您希望 return 您的树在每个点都计数为 class table
,您需要将 dlply
与匿名函数一起使用。这将生成一个列表,每个点一个元素,每个元素包含一个 table:
dlply(df, .(Point), function(x) table(x$Species))
# $`99`
#
# Ulmus.alata
# 1
#
# $`100`
#
# Blank
# 1
#
# $`101`
#
# Juniperus.virginiana Ulmus.americana
# 3 2
#
# $`102`
# Carya.cordiformis
# 1
另一方面,如果您愿意将计数存储在数据框中(可能比table更容易使用),您可以使用ddply
和 summarise
;按 'Point' 和 'Species' 分组,并用 length
:
ddply(df, .(Point, Species), summarise, count = length(Species))
# Point Species count
# 1 99 Ulmus.alata 1
# 2 100 Blank 1
# 3 101 Juniperus.virginiana 3
# 4 101 Ulmus.americana 2
# 5 102 Carya.cordiformis 1
您还可以查看等效的 dplyr
代码:
library(dplyr)
df %>%
group_by(Point, Species) %>%
summarise(count = n())
# Point Species count
# 1 99 Ulmus.alata 1
# 2 100 Blank 1
# 3 101 Juniperus.virginiana 3
# 4 101 Ulmus.americana 2
# 5 102 Carya.cordiformis 1