我有一个数据框,我需要添加一个列,以包含对应于现有数据帧的每一行的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种.我对所有匹配的东西都很偏执.
如何使用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)