如何使用 R studio 以这种方式“转置”数据?

问题描述 投票:0回答:2

嗨,我有一个类似于照片中的数据框(左图),我正在尝试获取右图的格式。我该怎么做?

example dataset and what I would like to obtain

我知道这是一个愚蠢的问题,但我错过了一些东西..

我怎样才能得到那个结果? 非常感谢!

我试过那些

long_data <- melt(data,id=c("Test"))

data.long <- data %>% pivot_longer(-Test, names_to = "变量", values_to = "值")

我也试过了

data_long=t(数据)

r data-manipulation transpose
2个回答
1
投票
library(dplyr)
library(tidyr)

df %>% 
  pivot_longer(-Test) %>% 
  pivot_wider(names_from = Test, values_from = value) 

 name  Pre       Post     
  <chr> <list>    <list>   
1 Q1    <dbl [4]> <dbl [4]>
2 Q2    <dbl [4]> <dbl [4]>
3 Q3    <dbl [4]> <dbl [4]>

library(dplyr)
library(tidyr)

df %>% 
  pivot_longer(-Test) %>% 
  pivot_wider(names_from = Test, values_from = value) %>% 
  unnest()

name    Pre  Post
   <chr> <dbl> <dbl>
 1 Q1        2     3
 2 Q1        2     2
 3 Q1        1     3
 4 Q1        3     2
 5 Q2        3     2
 6 Q2        3     3
 7 Q2        5     4
 8 Q2        4     2
 9 Q3        4     3
10 Q3        2     4
11 Q3        2     5
12 Q3        3     3

library(dplyr) #>= 1.1.0
library(tidyr)

df %>% 
  pivot_longer(-Test) %>% 
  pivot_wider(names_from = Test, values_from = value) %>% 
  unnest() %>% 
  summarize(mean_pre = mean(Pre), mean_post = mean(Post), .by=name)

  name  mean_pre mean_post
  <chr>    <dbl>     <dbl>
1 Q1        2         2.5 
2 Q2        3.75      2.75
3 Q3        2.75      3.75

数据:

df <- structure(list(Test = c("Pre", "Pre", "Pre", "Pre", "Post", "Post", 
"Post", "Post"), Q1 = c(2, 2, 1, 3, 3, 2, 3, 2), Q2 = c(3, 3, 
5, 4, 2, 3, 4, 2), Q3 = c(4, 2, 2, 3, 3, 4, 5, 3)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -8L))

0
投票

一个选项

library(data.table)
library(dplyr)
 df %>% 
  reframe(across(starts_with("Q"), mean), .by = Test) %>% 
  data.table::transpose(make.names = 'Test', keep.names = "Name")

-输出

  Name  Pre Post
1   Q1 2.00 2.50
2   Q2 3.75 2.75
3   Q3 2.75 3.75
© www.soinside.com 2019 - 2024. All rights reserved.