添加新的(较短的)列以进行tibble和扩展tibble以保持整洁

Naz*_*zer 3 r dplyr tidyr

我有一个数据框,我需要添加一个列,以包含对应于现有数据帧的每一行的3种.希望下面的例子清楚地表明:

Site    Year    Trt
A       2016    bowl
A       2016    vane
A       2017    target
A       2017    stick
B       2016    bowl
B       2016    vane
B       2017    target
B       2017    stick

species<-c("species1", "species2", "species3")
Run Code Online (Sandbox Code Playgroud)

然后我想去

Site    Year    Trt     Species
A       2016    bowl    species1
A       2016    vane    species1
A       2017    target  species1
A       2017    stick   species1
A       2016    bowl    species2
A       2016    vane    species2
A       2017    target  species2
A       2017    stick   species2
A       2016    bowl    species3
A       2016    vane    species3
A       2017    target  species3
A       2017    stick   species3
B       2016    bowl    species1
B       2016    vane    species1
B       2017    target  species1
B       2017    stick   species1
B       2016    bowl    species2
B       2016    vane    species2
B       2017    target  species2
B       2017    stick   species2
B       2016    bowl    species3
B       2016    vane    species3
B       2017    target  species3
B       2017    stick   species3
Run Code Online (Sandbox Code Playgroud)

我想有些rep方法可以,但真正的数据集有两个额外的列和141种.我对所有匹配的东西都很偏执.

MKR*_*MKR 6

如何使用tidyr::expand扩展数据:

library(tidyverse)
expand(data, nesting(Site, Year, Trt), species) %>% as.data.frame()

#     Site Year    Trt  species
# 1     A 2016   bowl species1
# 2     A 2016   bowl species2
# 3     A 2016   bowl species3
# 4     A 2016   vane species1
# 5     A 2016   vane species2
# 6     A 2016   vane species3
# 7     A 2017  stick species1
# 8     A 2017  stick species2
# 9     A 2017  stick species3
# 10    A 2017 target species1
# 11    A 2017 target species2
# 12    A 2017 target species3
# 13    B 2016   bowl species1
# 14    B 2016   bowl species2
# 15    B 2016   bowl species3
# 16    B 2016   vane species1
# 17    B 2016   vane species2
# 18    B 2016   vane species3
# 19    B 2017  stick species1
# 20    B 2017  stick species2
# 21    B 2017  stick species3
# 22    B 2017 target species1
# 23    B 2017 target species2
# 24    B 2017 target species3
Run Code Online (Sandbox Code Playgroud)

数据

data <- read.table(text = 
"Site    Year    Trt
A       2016    bowl
A       2016    vane
A       2017    target
A       2017    stick
B       2016    bowl
B       2016    vane
B       2017    target
B       2017    stick",
header = TRUE, stringsAsFactors = FALSE)

species<-c("species1", "species2", "species3")
Run Code Online (Sandbox Code Playgroud)