如何在 r 中将长 table 转换为宽 table?

How to convert long table to wide table in r?

我正在尝试格式化我的数据,使其更宽而不是更长,并且我似乎遇到了将其从列表转换为任何可以让我更改其形式的任何内容的问题。

library(stringr)
library(tidyr)
library(dplyr)


A <- as.list(c("v", "w", "x", "y", "NA"))
str(A) 
X <- 5
G <- str_split_fixed(A, ", ", X)
G <- as.data.frame(A)
G <- G[-c(182, 183)] #irrelevant on example data my actual data is much longer
P <- G
P <- gsub("NA", "Z", as.character(P))#also irrelavent for example data
P <- str_split_fixed(P, ", ", X)
colnames(P) <-  c("A", "B", "C", "D", "E")
Titles <- c("Time_Modifier", "Times", "Scrambles", "Blank", "ID")
T.1 <- strsplit(Titles, " ")
n <- nrow(P)
n/5
L <- rep(T.1, n/5)
T.T <- cbind(P, L)

T.T.1 <- subset(T.T, select = -c(B, C, D, E))
T.T.1 <- subset(T.T.1, L != "Blank")

我曾尝试使用 pivot_wider() 但出现此错误

pivot_wider(T.T.1,
           names_from = L,
           values_from = A
           )

UseMethod("pivot_wider") 错误: 没有适用于 'pivot_wider' 的方法应用于 class 的对象“c('matrix', 'array', 'list')”

我也曾尝试使用 pivot_wider_spec(),但我遇到了类似的错误。这让我认为 T.T.1 被存储为一个列表;哪个低,看吧。但是,我似乎无法将 T.T.1 更改为 pivot_wider 喜欢的数据类型。

我已经尝试使用 as.data.frame()、as.character 以及我能想到或找到的几乎所有其他方法来转换 T.T.1。

T.T.1 <- as.data.frame(T.T.1)
pivot_wider(T.T.1,
           names_from = L,
           values_from = A
           )

错误:必须使用有效的下标向量对列进行子集化。 x 下标类型错误 list。 i 必须是数字或字符。

T.T.1 <- as.character(T.T.1)
pivot_wider(T.T.1,
           names_from = L,
           values_from = A
           )

UseMethod("pivot_wider") 错误: 没有适用于 'pivot_wider' 的方法应用于 class“字符”

的对象

非常感谢任何帮助。

pivot_wider 需要一个数据框:

因此在 T.T.1 之前使用 as_tibbleas.data.frame,这是一个矩阵(您可以使用 class(T.T.1):

您将获得一份清单。如果您想查看列表,请使用 tidyr 包中的 unnest

pivot_wider(as_tibble(T.T.1),
            names_from = L,
            values_from = A
) %>% 
  unnest(cols = c(Time_Modifier, Times, Scrambles, ID))

输出:

  Time_Modifier Times Scrambles ID   
  <chr>         <chr> <chr>     <chr>
1 v             w     x         Z