如何重塑数据框并将重复列转换为数据框行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何重塑数据框并将重复列转换为数据框行?相关的知识,希望对你有一定的参考价值。

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

my dataframe at the moment

所以这就是它的样子:我有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)

data

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

以上是关于如何重塑数据框并将重复列转换为数据框行?的主要内容,如果未能解决你的问题,请参考以下文章

如果列中的值在一组值列表中,则过滤数据框行[重复]

R - 检查 r 数据框行的任何列中是不是存在 NA,如果存在,则删除该行 [重复]

将列表附加为数据框行

将三列数据框重塑为矩阵(“长”到“宽”格式)[重复]

熊猫通过根据另一列的值添加列级别来重塑数据框[重复]

如果引发 System.ArgumentException,如何将数据框行传递给 API?