问题描述
您好,我正在尝试使用spread()
函数将数据从长格式转换为宽格式。实际上它是可行的,但是它为我提供了一半的数据帧,其中每个转换列的NA都为NA。
我的数据框的一个最小示例:
Trial <- c(1,2,3,4,5,6,1,6)
Period <- c(4,6)
variable <- c("SpotRate","SpotSpread")
value <- c(0.5,0.4,0.2,0.3,0.6)
df <- cbind(Trial,Period,variable,value)
Wide_data <- spread(df,value,convert=TRUE)
我想将变量转换成两列“ SpotRate”和“ SpotSpread”以及相应的值。这是可行的,但是其他变量的每个值都在其中两次(Trial,Period等),SpotRate和SpotSpread列的一半用NA填充。如何将R转换为宽数据后告诉R将所有重复值合并为一个?
谢谢! :)
解决方法
也许您正在寻找这个:
library(tidyverse)
#Data
Trial <- c(1,2,3,4,5,6,1,6)
Period <- c(4,6)
variable <- c(rep("SpotRate",6),rep("SpotSpread",6))
value <- c(0.5,0.4,0.2,0.3,0.6)
df <- as.data.frame(cbind(Trial,Period,variable,value),stringsAsFactors = F)
#Code
df %>%
arrange(Trial) %>%
group_by(Trial) %>%
pivot_wider(names_from = variable,values_from=value) %>% ungroup()
输出:
# A tibble: 6 x 4
Trial Period SpotRate SpotSpread
<chr> <chr> <chr> <chr>
1 1 4 0.5 0.4
2 2 5 0.4 0.2
3 3 6 0.2 0.3
4 4 4 0.3 0.6
5 5 5 0.6 0.5
6 6 6 0.5 0.4