[英]How to transpose/reshape this dataframe
如何改造 dataframe 以達到預期的效果?
這是一個示例 dataframe:
id <- c("Item1","Item2","Item3","Item1","Item2","Item3")
year <- c(2016,2016,2016,2017,2017,2017)
WSP1 <- c(1:6)
WSP2 <- c(7:12)
test <- data.frame(id, year, WSP1, WSP2)
所需的 output:
WSP |year |Item1 |Item2 |Item3
WSP1|2016 |1 |2 |3
WSP1|2017 |4 |5 |6
WSP2|2016 |7 |8 |9
WSP2|2017 |10 |11 |12
我試過了:
test1 <- pivot_longer(test,-year)
test2 <- pivot_wider(test,-year)
您可以嘗試以下方法:
library(tidyr)
test %>%
pivot_longer(cols = c(WSP1, WSP2), names_to = "WSP") %>%
pivot_wider(names_from = "id")
# A tibble: 4 x 5
# year WSP Item1 Item2 Item3
# <dbl> <chr> <int> <int> <int>
# 1 2016 WSP1 1 2 3
# 2 2016 WSP2 7 8 9
# 3 2017 WSP1 4 5 6
# 4 2017 WSP2 10 11 12
你可以試試這個。 我希望這有幫助:
library(reshape2)
df0 <- melt(test,id.vars = c('id','year'))
#Reshape
df1 <- reshape(data = df0,idvar = c('variable','year'),timevar = 'id',direction = 'wide')
year variable value.Item1 value.Item2 value.Item3
1 2016 WSP1 1 2 3
4 2017 WSP1 4 5 6
7 2016 WSP2 7 8 9
10 2017 WSP2 10 11 12
從reshape2
recast
的選項
library(reshape2)
recast(test, id.var = c('id', 'year'), variable + year ~ id)
# variable year Item1 Item2 Item3
#1 WSP1 2016 1 2 3
#2 WSP1 2017 4 5 6
#3 WSP2 2016 7 8 9
#4 WSP2 2017 10 11 12
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.