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

时间:2019-04-19 09:34:58

标签: r aggregate reshape transpose

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

my dataframe at the moment

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

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

我尝试使用管道运算符%>%进行一些操作,但此刻目前还没有真正起作用。既然我没有什么想法了,我想,也许您可​​以帮帮我。

谢谢!

1 个答案:

答案 0 :(得分:0)

一种选择是根据列名将数据split listrbind 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 将它们在一起{p}

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

数据

import geopandas as gpd
import geoplot as gplt

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
denmark = world[world.name == 'Denmark']