如何重塑数据框并将重复列转置为数据框行?
How to reshape dataframe and transpose recurring columns to dataframe rows?
我有一个包含重复列的数据框(间隔为 5)。
my dataframe at the moment
它看起来是这样的:我有 5 种类型的列,它们随着时间的推移重复出现。重复列的名称中有一个后缀,也可以是 removed/renamed,这样它们就会全部匹配。
我想做的是将这些重复出现的列转置为行,这样我最后只有 5 列(日期,PX_LAST,PX_HIGH,PX_VOLUME, 姓名)。然后我就可以按日期、名称等对数据框进行分组,并做很多其他事情。
我尝试了一些管道运算符 %>% 的操作,但目前并没有真正奏效。由于我没有任何想法,我想也许你可以帮助我。
提前致谢!
一个选项是根据列名split
将数据data.frame list
,然后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))
我有一个包含重复列的数据框(间隔为 5)。
my dataframe at the moment
它看起来是这样的:我有 5 种类型的列,它们随着时间的推移重复出现。重复列的名称中有一个后缀,也可以是 removed/renamed,这样它们就会全部匹配。
我想做的是将这些重复出现的列转置为行,这样我最后只有 5 列(日期,PX_LAST,PX_HIGH,PX_VOLUME, 姓名)。然后我就可以按日期、名称等对数据框进行分组,并做很多其他事情。
我尝试了一些管道运算符 %>% 的操作,但目前并没有真正奏效。由于我没有任何想法,我想也许你可以帮助我。
提前致谢!
一个选项是根据列名split
将数据data.frame list
,然后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))