将dataframe的列转换为R中的行

将dataframe的列转换为R中的行,r,dataframe,data-conversion,R,Dataframe,Data Conversion,我有以下数据框可供分析 Sname sid st.sn.s1 st.sn.s2 st.sn.s3 st.sn.s1 st.sn.s2 st.sn.s3 a 12 22 23 24 31 32 33 我想把它转换成与下面类似的东西 Sname sid st.sn.s1 st.sn.s2 st.sn.s3 a

我有以下数据框可供分析

Sname   sid    st.sn.s1 st.sn.s2    st.sn.s3    st.sn.s1    st.sn.s2    st.sn.s3

    a       12     22       23          24          31          32          33
我想把它转换成与下面类似的东西

Sname   sid st.sn.s1    st.sn.s2    st.sn.s3            

a       12  22          23          24          
a       12  31          32          33  

有人能告诉我相关的资源或帮助吗

使用
pivot\u longer
pivot\u wide
函数(),您可以执行以下操作:

library(tidyr)
图书馆(dplyr)
df%>%pivot\u更长(-c(Sname,sid),名称\u to=“var”,值\u to=“val”)%>%
枢轴宽度(名称\u from=var,值\u from=val)%>%
dplyr::选择(-.copy)
#一个tibble:2x5
Sname sid st.sn.s1 st.sn.s2 st.sn.s3
1 a 12 22 23 24
2 a 12 31 32 33
可复制示例

结构(列表(Sname=“a”,sid=12L,st.sn.s1=22L,st.sn.s2=23L, st.sn.s3=24L,st.sn.s1=31L,st.sn.s2=32L,st.sn.s3=33L),行名=c(NA, -1L),class=c(“data.table”,“data.frame”),.internal.selfref=)
使用
pivot\u longer
pivot\u wide
函数(),您可以执行以下操作:

library(tidyr)
图书馆(dplyr)
df%>%pivot\u更长(-c(Sname,sid),名称\u to=“var”,值\u to=“val”)%>%
枢轴宽度(名称\u from=var,值\u from=val)%>%
dplyr::选择(-.copy)
#一个tibble:2x5
Sname sid st.sn.s1 st.sn.s2 st.sn.s3
1 a 12 22 23 24
2 a 12 31 32 33
可复制示例

结构(列表(Sname=“a”,sid=12L,st.sn.s1=22L,st.sn.s2=23L, st.sn.s3=24L,st.sn.s1=31L,st.sn.s2=32L,st.sn.s3=33L),行名=c(NA, -1L),class=c(“data.table”,“data.frame”),.internal.selfref=)
您可以使用基本R函数
rbind

df <- structure(list(Sname = "a", sid = 12L, st.sn.s1 = 22L, st.sn.s2 = 23L, 
               st.sn.s3 = 24L, st.sn.s1 = 31L, st.sn.s2 = 32L, st.sn.s3 = 33L), row.names = c(NA, 
                                                                                              -1L), class = "data.frame")

rbind(df[, 1:5], df[, c(1:2, 6:8)])

#   Sname sid st.sn.s1 st.sn.s2 st.sn.s3
# 1     a  12       22       23       24
# 2     a  12       31       32       33

df您可以使用基本R函数
rbind

df <- structure(list(Sname = "a", sid = 12L, st.sn.s1 = 22L, st.sn.s2 = 23L, 
               st.sn.s3 = 24L, st.sn.s1 = 31L, st.sn.s2 = 32L, st.sn.s3 = 33L), row.names = c(NA, 
                                                                                              -1L), class = "data.frame")

rbind(df[, 1:5], df[, c(1:2, 6:8)])

#   Sname sid st.sn.s1 st.sn.s2 st.sn.s3
# 1     a  12       22       23       24
# 2     a  12       31       32       33

df广义基R解决方案,它用不同的
“Sname”
s解释多行


res广义基R解决方案,用不同的
“Sname”
s解释多行


res谢谢你的方法..如果一行中有两行以上该怎么办..我指的是一个已展平的嵌套列表..我正在寻找一种将列转换为行的通用解决方案.谢谢你的方法..如果一行中有两行以上该怎么办..我指的是一个已展平的嵌套列表..我正在寻找将列转换为行的通用解决方案。感谢您的方法。如果一行中有两行以上该怎么办。我指的是已展开的嵌套列表。我正在寻找将列转换为行的通用解决方案。感谢您的方法。如果一行中有两行以上该怎么办。我指的是嵌套列表已展平的列表…我正在寻找将列转换为行的通用解决方案。感谢您的方法..如果我在一行中有两行以上该怎么办..我是指已展平的嵌套列表…我正在寻找将列转换为行的通用解决方案。一行中有两行是什么意思?请提供数据集和所需输出的可复制示例。现在,很难理解你到底在寻找什么。谢谢你的方法。如果我在一行中有两行以上呢。我是说一个嵌套的列表已经被压平了。我正在寻找一个通用的解决方案,将列转换成行。你说一行中有两行是什么意思?请提供数据集和所需输出的可复制示例。现在,很难理解你到底在寻找什么。
dat <- structure(list(Sname = c("a", "b", "c"), sid = c(12L, 12L, 12L
), st.sn.s1 = c(22L, 22L, 22L), st.sn.s2 = c(23L, 23L, 23L), 
    st.sn.s3 = c(24L, 24L, 24L), st.sn.s1 = c(31L, 31L, 31L), 
    st.sn.s2 = c(32L, 32L, 32L), st.sn.s3 = c(33L, 33L, 33L)), row.names = c(NA, 
-3L), class = "data.frame")