[英]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.