R 在循环中创建多个数据帧并向其添加列

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

我想用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       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
对象。我无法让它工作