如果我的术语错误,请纠正我,因为在这个问题上我不太清楚我在处理有关元素,对象,列表的事情。我只知道它不是数据框。
使用prepksel {adehabitatHS}
中的示例我试图修改自己的数据以适应他们的包。在其示例数据上运行此命令会创建一个对象吗?叫x这是一个有3个部分的列表?元素?它。
示例数据代码:
library(adehabitatHS)
data(puechabonsp)
locs <- puechabonsp$relocs
map <- puechabonsp$map
pc <- mcp(locs[,"Name"])
hr <- hr.rast(pc, map)
cp <- count.points(locs[,"Name"], map)
x <- prepksel(map, hr, cp)
查看x的结构,它是一个名为tab,weight和factor
的3个元素的列表str(x)
List of 3
$ tab :'data.frame': 191 obs. of 4 variables:
..$ Elevation : num [1:191] 141 140 170 160 152 121 104 102 106 103 ...
..$ Aspect : num [1:191] 4 4 4 1 1 1 1 1 4 4 ...
..$ Slope : num [1:191] 20.9 18 17 24 23.9 ...
..$ Herbaceous: num [1:191] 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 ...
$ weight: num [1:191] 1 1 1 1 1 2 2 4 0 1 ...
$ factor: Factor w/ 4 levels "Brock","Calou",..: 1 1 1 1 1 1 1 1 1 1 ...
对于我的数据,我将创建多个"x"
列表,并希望合并每个段中的数据。所以,我在2007,2008和2009年创建了一个"x"
。现在,我想要追加08到07年的"tab"
元素,然后是09到07/08。并对此列表"weight"
的{{1}}和"factor"
元素执行相同操作。你如何绑定这些数据?我考虑在列表的每个段上使用"x"
,然后附加然后加入每个段的年度数据,然后将这三个段重新加入一个列表中。但这很麻烦,看起来效率很低。
我知道这不是它的工作方式,但在我的脑海里,这就是我应该做的事情:
unlist
也许newlist<-append(x07$tab, x08$tab, x09$tab)
newlist<-append(x07$weight, x08$weight, x09$weight)
newlist<-append(x07$factor, x08$factor, x09$factor)
? rbind
答案 0 :(得分:1)
append
适用于矢量和列表,但不会为数据帧提供所需的输出,列表中的元素(以及它们是列表)具有不同的类型。像
tocomb <- list(x07,x08,x09)
newlist <- list(
tab = do.call("rbind",lapply(tocomb,function(x) x$tab)),
weight = c(lapply(tocomb,function(x) x$weight),recursive=TRUE),
factor = c(lapply(tocomb,function(x) x$factor),recursive=TRUE)
)
如果因素具有不同的级别,您可能需要小心谨慎 - 类似as.character
之前的因素,然后再使用as.factor
转换回来。
这未经过测试,因此可能需要进行一些装配。我不是R精灵,这可能不是最好的答案。