我如何将输入数据转换为下面的输出数据?对于每个Grp1,我希望指标列变成行,每个值Grp2都有一列.谢谢

输入数据数据

 structure(list(Grp1 = c("A", "A", "B", "B"), Grp2 = c("test", 
    "ctrl", "test", "ctrl"), metric1 = c(10L, 50L, 40L, 30L), metric2 = c(10L, 
    20L, 45L, 40L), metric3 = c(15L, 20L, 30L, 40L), metric4 = 1:4), class = "data.frame", row.names = c(NA, 
    -4L))

期望输出

structure(list(Grp1 = c("A", "A", "A", "A", "B", "B", "B", "B"
), metric = c("metric1", "metric2", "metric3", "metric4", "metric1", 
"metric2", "metric3", "metric4"), test = c(10L, 10L, 15L, 1L, 
40L, 45L, 30L, 3L), ctrl = c(50L, 20L, 20L, 2L, 30L, 40L, 40L, 
4L)), class = "data.frame", row.names = c(NA, -8L))

推荐答案

我们可以首先将"公制"列reshape 为"长"列,然后使用Grp2作为列名将其reshape 回宽(names_from).

library(dplyr)
library(tidyr)
df1 %>% 
   pivot_longer(cols = starts_with('metric'), names_to = 'metric') %>%
   pivot_wider(names_from = Grp2, values_from = value)

-输出

# A tibble: 8 × 4
  Grp1  metric   test  ctrl
  <chr> <chr>   <int> <int>
1 A     metric1    10    50
2 A     metric2    10    20
3 A     metric3    15    20
4 A     metric4     1     2
5 B     metric1    40    30
6 B     metric2    45    40
7 B     metric3    30    40
8 B     metric4     3     4

R相关问答推荐

变量计算按R中的行更改

计算R中的威布尔分布的EDF

整数成随机顺序与约束R?

在连续尺度上转置标签[瀑布图,R]

仅在Facet_WRAP()中的相应方面包含geom_abline()

基于R中的间隔扩展数据集行

Geom_Hline将不会出现,而它以前出现了

在保留列表元素属性的同时替换列表元素

悬崖三角洲超大型群数计算导致整数溢出

如何移除GGPlot中超出与面相交的任何格网像元

手动指定从相同数据创建的叠加图的 colored颜色

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

当由base::限定时,`[.factor`引发NextMethod错误

变异以按组从其他列创建具有最大和最小值的新列

如何将EC50值绘制在R中的剂量-react 曲线上?

如何为包创建自定义roxygen2标签?

图中显示错误 colored颜色 的图例geom_sf

汇总数据:在跨越()all_of()Dynamic_list_of_vars=>;所选内容不能有缺失值的汇总()中出错

打印的.txt文件,将值显示为&Quot;Num&Quot;而不是值

在shiny /bslb中,当卡片是从json生成时,如何水平排列卡片?