我想使用名称列转置数据帧以创建新列名称。这是我输入:基于名称列转置数据帧
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)' –