1.先奉上代码和结果
library(tidyverse)
dt = tribble(
~observation, ~A_count, ~B_count, ~A_dbh, ~B_dbh,
"Richmond(Sam)", 7, 2, 100, 110,
"Windsor(Ash)", 10, 5, 80, 87,
"Bilpin(Jules)", 5, 8, 95, 90)
tidy_dt = dt %>%
pivot_longer(-observation,
names_to = c("speices", ".value"),
names_sep = "_") %>%
separate(observation, into = c("site", "surveyor"))
原始数据的样式:
> dt
# A tibble: 3 × 5
observation A_count B_count A_dbh B_dbh
<chr> <dbl> <dbl> <dbl> <dbl>
1 Richmond(Sam) 7 2 100 110
2 Windsor(Ash) 10 5 80 87
3 Bilpin(Jules) 5 8 95 90
运行结果如下:
> tidy_dt
# A tibble: 6 × 5
site surveyor speices count dbh
<chr> <chr> <chr> <dbl> <dbl>
1 Richmond Sam A 7 100
2 Richmond Sam B 2 110
3 Windsor Ash A 10 80
4 Windsor Ash B 5 87
5 Bilpin Jules A 5 95
6 Bilpin Jules B 8 90
2.逐步解释代码
2.1 先构建数据框dt
tidy_dt = dt %>%pivot_longer(-observation,names_to = c("speices", ".value"),names_sep = "_")
运行结果如下:
> dt %>%pivot_longer(-observation,names_to = c("speices", ".value"),names_sep = "_")
# A tibble: 6 × 4
observation speices count dbh
<chr> <chr> <dbl> <dbl>
1 Richmond(Sam) A 7 100
2 Richmond(Sam) B 2 110
3 Windsor(Ash) A 10 80
4 Windsor(Ash) B 5 87
5 Bilpin(Jules) A 5 95
6 Bilpin(Jules) B 8 90
其中,在长变宽的时候,必须得去掉observation,拆分"A_count"的时候,需要使用分隔符"_“,“species"和”.value"分别对应的是A和count,另外,”.value"对应的是之前"A_count"所对应的数值,也就是"7",“10”,"5"等