R 如何重塑数据帧并将循环列转换为数据帧行?

R 如何重塑数据帧并将循环列转换为数据帧行?,r,aggregate,reshape,transpose,R,Aggregate,Reshape,Transpose,我有一个具有重复列的数据帧(间隔为5) 看起来是这样的:我有5种类型的列,它们随着时间的推移不断重复。循环列的名称中有一个后缀,也可以删除/重命名该后缀,以便它们都匹配 我想做的是将这些重复出现的列转换为行,这样我最后只有5列(Dates、PX_LAST、PX_HIGH、PX_VOLUME、Name)。然后,我将能够按日期、名称等对数据帧进行分组,并执行许多其他操作 我尝试了一些使用管道操作符%>%的操作,但目前没有真正起作用。既然我没有什么想法了,我想,也许你能帮我 提前谢谢 一个选项是根据

我有一个具有重复列的数据帧(间隔为5)

看起来是这样的:我有5种类型的列,它们随着时间的推移不断重复。循环列的名称中有一个后缀,也可以删除/重命名该后缀,以便它们都匹配

我想做的是将这些重复出现的列转换为行,这样我最后只有5列(Dates、PX_LAST、PX_HIGH、PX_VOLUME、Name)。然后,我将能够按日期、名称等对数据帧进行分组,并执行许多其他操作

我尝试了一些使用管道操作符%>%的操作,但目前没有真正起作用。既然我没有什么想法了,我想,也许你能帮我


提前谢谢

一个选项是根据列名
将数据拆分为data.frame的
列表,然后
将它们合并到一起

nm1 <-  sub("\\.\\d+", "", names(dft))
i1 <- ave(seq_along(dft), nm1, FUN = seq_along)
out <- do.call(rbind, lapply(split.default(dft, i1), 
      function(x) setNames(x, sub("\\.\\d+", "", names(x)))))
row.names(out) <- NULL
out
#  Date Age
#1    1  21
#2    2  15
#3    1  32
#4    2  12
数据
dft一个选项是根据列名
将数据拆分为data.frame的
列表,然后将它们合并到一起

nm1 <-  sub("\\.\\d+", "", names(dft))
i1 <- ave(seq_along(dft), nm1, FUN = seq_along)
out <- do.call(rbind, lapply(split.default(dft, i1), 
      function(x) setNames(x, sub("\\.\\d+", "", names(x)))))
row.names(out) <- NULL
out
#  Date Age
#1    1  21
#2    2  15
#3    1  32
#4    2  12
数据
dft你能用
dput
和预期输出来展示一个小的可重复的例子吗这是两个不同的数据集还是一个单独的数据集?你能试试下面公布的解决方案吗(假设它是一个单一的数据集,比如第一个是当前的情况,我现在拥有的。另一个是我理想情况下希望数据帧的样子。这两个只是我希望它看起来如何的随机示例。你能用
dput
和预期输出dft展示一个小的可重复示例吗?这两个是不同的da吗tasets还是一个?你能试试下面贴的解决方案吗(假设它是一个单一的数据集,比如第一个是当前的情况,我现在拥有的。另一个是我理想的数据框架。这两个只是我希望它看起来如何的随机示例。非常感谢!!!这两个都有效。起初它没有,但我对我自己的数据框架有一些问题,但是什么时候我只选了几列就成功了。谢谢你!!@MartiIn,可能除了结尾的数字外,名字有一些细微的变化。非常感谢!!!这两个都有效。起初没有,但我对自己的数据帧有一些问题,但当我只选了几列时,它就成功了。谢谢你!!@MartiIn,可能有slight名称的更改,而不是末尾的数字
dft <- data.frame("Date" = 1:2, "Age" = c(21,15), "Date" = 1:2, "Age" = c(32,12))