繁体   English   中英

如何转置/重塑这个 dataframe

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM