繁体   English   中英

如何重塑数据框并将循环列转置为数据框行?

[英]How to reshape dataframe and transpose recurring columns to dataframe rows?

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

我现在的数据框

所以这是它的外观:我有5种类型的列,它们随着时间的推移而重复。 重复出现的列在名称中都有一个后缀,也可以删除/重命名该后缀,以便它们都匹配。

我想做的就是将这些重复出现的列转置为行,以便最后只剩下5列(日期,PX_LAST,PX_HIGH,PX_VOLUME,名称)。 然后,我将能够按日期,名称等对数据框进行分组,并执行许多其他操作。

我尝试使用管道操作符%>%进行一些操作,但此刻目前还没有真正起作用。 因为我没有任何想法,所以我想,也许您可​​以帮帮我。

提前致谢!

一个选择是将split数据到一个list基于列名data.frame,然后rbind在一起

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

或者另一个选择是遍历unique名称,对数据进行子集, unlist并转换为data.frame

un1 <- unique(nm1)
setNames(data.frame(lapply(un1, 
       function(x) unlist(dft[grep(x, names(dft))]))), un1)

数据

dft <- data.frame("Date" = 1:2, "Age" = c(21,15), "Date" = 1:2, "Age" = c(32,12))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM