R 在循环中创建多个数据帧并向其添加列
我想用for循环创建多个数据帧,并在每个新数据帧中添加一列和删除其他列。原始数据集如下所示:R 在循环中创建多个数据帧并向其添加列,r,R,我想用for循环创建多个数据帧,并在每个新数据帧中添加一列和删除其他列。原始数据集如下所示: Site Count1 Count2 Count3 Count4 Count5 Count6 Count7 Count8 Count9 Habitat 1 0 0 0 0 1 0 2 0 1 Forest 2 1 2 3
Site Count1 Count2 Count3 Count4 Count5 Count6 Count7 Count8 Count9 Habitat
1 0 0 0 0 1 0 2 0 1 Forest
2 1 2 3 0 0 2 0 1 0 Field
3 2 0 0 1 1 1 0 2 0 Field
基本上,我想为每个计数列创建一个新的数据帧,所以这里我有九个新的数据帧,如下所示:
Site Count1 Count2 Count3 Count4 Count5 Count6 Count7 Count8 Count9 Habitat
1 0 0 0 0 1 0 2 0 1 Forest
2 1 2 3 0 0 2 0 1 0 Field
3 2 0 0 1 1 1 0 2 0 Field
df.1:
df.2:
等等
这将创建我需要的帧:
for (z in 1:9){
assign(paste("df",z,sep="."),orig_data)
}
我不知道第二步是什么——在每个新的数据框中加入适当的计数以及habitat列(以及上面未显示的其他数据框)。我希望保持这一点的自动化,因为可能会有9个以上的计数。这将创建一个包含9个数据帧的列表,这(相信我)比在全局环境中创建9个变量要好得多:
data.list <- lapply(1:9, function(i) {
setNames(data[c("Site", paste0("Count", i), "Habitat")],
c("Site", "TotCount", "Habitat"))
})
data.list这将创建一个包含九个data.frames的列表,这(相信我)比在全局环境中创建九个变量要好得多:
data.list <- lapply(1:9, function(i) {
setNames(data[c("Site", paste0("Count", i), "Habitat")],
c("Site", "TotCount", "Habitat"))
})
data.list这将把df.x
对象放入全局环境中
# example data
df <- data.frame(Site = 1:3,
Count1 = 0:2,
Count2 = c(0,2,0),
Count3 = c(0,3,0),
Habitat = c("Forest", "Field", "Field")
)
和ls()
,您将看到
> ls()
[1] "countSplit_2df" "df" "df.2" "df.3"
[5] "df.4"
注意,这与您要求的不完全一样,因为我使用了grep
中的列号来命名它们
要完成回答,需要有人在grep
“Count”之后选择正确的文本方式——然后用它来标记df.x
对象。我无法让它工作 这将把df.x
对象放入全局环境中
# example data
df <- data.frame(Site = 1:3,
Count1 = 0:2,
Count2 = c(0,2,0),
Count3 = c(0,3,0),
Habitat = c("Forest", "Field", "Field")
)
和ls()
,您将看到
> ls()
[1] "countSplit_2df" "df" "df.2" "df.3"
[5] "df.4"
注意,这与您要求的不完全一样,因为我使用了grep
中的列号来命名它们
要完成回答,需要有人在grep
“Count”之后选择正确的文本方式——然后用它来标记df.x
对象。我无法让它工作