R 将较长的6列透视到3列
我知道我的问题很简单,但我整个上午都在努力,脑子都转不过来 我有这个数据框:R 将较长的6列透视到3列,r,dataframe,dplyr,pivot,R,Dataframe,Dplyr,Pivot,我知道我的问题很简单,但我整个上午都在努力,脑子都转不过来 我有这个数据框: GeneID Gene.Symbol01 Ratio.2h Ratio.6h Ratio.10h Ratio.24h Pvalue_2h 1 174 FUT -0.23618761 -0.3276162 -0.1366940 -4.4899131 0.49045105 Pvalue_6h Pvalue_10h Pvalue_24h 1 0.06128851 0.
GeneID Gene.Symbol01 Ratio.2h Ratio.6h Ratio.10h Ratio.24h Pvalue_2h
1 174 FUT -0.23618761 -0.3276162 -0.1366940 -4.4899131 0.49045105
Pvalue_6h Pvalue_10h Pvalue_24h
1 0.06128851 0.59995612 0.0001798584
除了GeneID和GeneSymbol之外,我需要将所有列的轴都加长。结果数据框应该有3个新列。一个有时间:2h、6h、10h和24h。然后再增加两列,其中一列包含比率值,另一列包含pvalues
我知道这应该通过名称到和名称模式的组合来完成。
我试过很多东西,但都做不到
我最后试过的是:
pivot_longer(cols = -c(GeneID, Gene.Symbol01),
names_to = c("Time", ".value"),
names_pattern = "_")
Dput:
使用熔体:
library(data.table)
melt(df,id.vars=1:2) %>% separate(variable,c("type","time"))) %>%
pivot_wider(names_from =type,values_from= value)
结果:
#
# GeneID Gene.Symbol01 time Ratio Pvalue
# <dbl> <fct> <chr> <dbl> <dbl>
#1 174 FUT 2h -0.236 0.490
#2 174 FUT 6h -0.328 0.0613
#3 174 FUT 10h -0.137 0.600
#4 174 FUT 24h -4.49 0.000180
#
#GeneID Gene.Symbol01时间比率Pvalue
#
#1174未来2小时-0.236 0.490
#2174 FUT 6h-0.328 0.0613
#3174 FUT 10h-0.137 0.600
#4174未来24小时-4.49 0.000180
使用tidyverse
您可能希望将所有变量从Ratio.2h
旋转到Pvalue\u 24h
,然后将其分为两列
library(tidyverse)
DF %>%
pivot_longer(Ratio.2h:Pvalue_24h, names_to = "var") %>%
separate(var, into = c("type", "time"), sep = "_|\\.")
# # A tibble: 8 x 5
# GeneID Gene.Symbol01 type time value
# <dbl> <chr> <chr> <chr> <dbl>
# 1 174 FUT Ratio 2h -0.236
# 2 174 FUT Ratio 6h -0.328
# 3 174 FUT Ratio 10h -0.137
# 4 174 FUT Ratio 24h -4.49
# 5 174 FUT Pvalue 2h 0.490
# 6 174 FUT Pvalue 6h 0.0613
# 7 174 FUT Pvalue 10h 0.600
# 8 174 FUT Pvalue 24h 0.000180
数据
DF <- tribble(~GeneID, ~Gene.Symbol01, ~Ratio.2h, ~Ratio.6h, ~Ratio.10h, ~Ratio.24h, ~Pvalue_2h,~Pvalue_6h, ~Pvalue_10h, ~Pvalue_24h,
174, "FUT", -0.23618761, -0.3276162, -0.1366940, -4.4899131, 0.49045105,0.06128851, 0.59995612, 0.0001798584)
DF
DF %>%
pivot_longer(Ratio.2h:Pvalue_24h, names_to = "var") %>%
separate(var, into = c("type", "time"), sep = "_|\\.") %>%
pivot_wider(names_from = "type", values_from = "value")
# # A tibble: 4 x 5
# GeneID Gene.Symbol01 time Ratio Pvalue
# <dbl> <chr> <chr> <dbl> <dbl>
# 1 174 FUT 2h -0.236 0.490
# 2 174 FUT 6h -0.328 0.0613
# 3 174 FUT 10h -0.137 0.600
# 4 174 FUT 24h -4.49 0.000180
DF <- tribble(~GeneID, ~Gene.Symbol01, ~Ratio.2h, ~Ratio.6h, ~Ratio.10h, ~Ratio.24h, ~Pvalue_2h,~Pvalue_6h, ~Pvalue_10h, ~Pvalue_24h,
174, "FUT", -0.23618761, -0.3276162, -0.1366940, -4.4899131, 0.49045105,0.06128851, 0.59995612, 0.0001798584)