我想使用名稱列轉置數據幀以創建新列名稱。這是我輸入:基於名稱列轉置數據幀
Name X Y Z
sample1_A 1 2 3
sample1_B 3 2 1
sample2_A 1 2 3
sample2_B 3 2 1
和預期輸出:
Name XA XB YA YB ZA ZB
sample1 1 3 2 2 3 1
sample2 1 3 2 2 3 1
不過,我覺得我,你可以轉功能,但我不知道該如何處理列和行的名稱。
在此先感謝!
我想使用名稱列轉置數據幀以創建新列名稱。這是我輸入:基於名稱列轉置數據幀
Name X Y Z
sample1_A 1 2 3
sample1_B 3 2 1
sample2_A 1 2 3
sample2_B 3 2 1
和預期輸出:
Name XA XB YA YB ZA ZB
sample1 1 3 2 2 3 1
sample2 1 3 2 2 3 1
不過,我覺得我,你可以轉功能,但我不知道該如何處理列和行的名稱。
在此先感謝!
我們可以使用從data.table
dcast
可以採取多種value.var
列
library(data.table)
dcast(setDT(df1)[, c("Name", "grp") := tstrsplit(Name, "_")],
Name ~grp, value.var = c("X", "Y", "Z"), sep = "")
# Name XA XB YA YB ZA ZB
#1: sample1 1 3 2 2 3 1
#2: sample2 1 3 2 2 3 1
謝謝,但是有可能不指定'value.var'中的值,因爲在真實數據集中存在多個value.var – user2904120
,並且具有更靈活的附加後綴的方式,例如, _A而不僅僅是A – user2904120
@ user2904120您可以使用列名即'names(df1)[ - 1]'ie'dcast(setDT(df1)[,c(「Name」,「grp」):= tstrsplit(Name ,「_」)],Name〜grp,value.var = names(df1)[2:4],sep =「」)' – akrun
是那些真正的'row.names'或者是一個叫做'Name'列?你展示它的方式使它看起來像後者。你可以用'dput()'分享數據,所以它是複製/粘貼的,結構是明確的? – Gregor
它實際上是後者,你如何建議在帖子中調用它,以便我可以編輯它? – user2904120
試試'library(tidyverse); df%>%separate(Name,into = c(「Sample」,「Name」))%>%gather(Key,Value,-Sample,-Name)%>%unite(Res,Key,Name,sep =「 「)%>%spread(Res,Value)' –