将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")