在R中带来长而广泛的数据而不会丢失值

问题描述

您好,我正在尝试使用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