gpt4 book ai didi

r - 如何将数据帧逐行拆分为n个 block ,应用函数并合并?

转载 作者:行者123 更新时间:2023-12-04 13:49:04 25 4
gpt4 key购买 nike

我有130,209行的data.frame

> head(dt)

mLow1 mHigh1 mLow2 mHigh2 meanLow meanHigh fc mean
A_00001 37.00 12.75 99.25 78.50 68.125 45.625 1.4931507 56.8750
A_00002 31.00 21.50 84.75 53.00 57.875 37.250 1.5536913 47.5625
A_00003 72.50 26.50 81.75 74.75 77.125 50.625 1.5234568 63.8750

我想将 data.frame拆分为12,在 scale列上应用 fc函数,然后将其组合。这里没有分组变量,否则我会用 ddply。另外,由于130,209不能被12整除,因此生成的 data.frames将不平衡,即11 data.frame将具有10,851行,最后一个将具有10,848行,但这很好。

那么如何将 data.frame按行拆分为n个块(在本例中为12),应用函数,然后将它们组合在一起?任何帮助将不胜感激。

更新:
使用两个最佳解决方案,我得到了不同的结果:
使用@Ben Bolker的解决方案,
mLow1 mHigh1 mLow2 mHigh2          UID       gene_id meanLow meanHigh mean         fc
1.5 3.25 1 1.25 MGLibB_00021 0610010K14Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibA_00034 0610037L13Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibB_00058 1100001G20Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibA_00061 1110001A16Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibA_00104 1110034G24Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibA_00110 1110038F14Rik 1.25 2.25 1.75 -0.5231249

使用@MichaelChirico的答案:
mLow1 mHigh1 mLow2 mHigh2          UID       gene_id meanLow meanHigh mean        fc  fc_scaled
1.5 3.25 1 1.25 MGLibB_00021 0610010K14Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibA_00034 0610037L13Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibB_00058 1100001G20Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibA_00061 1110001A16Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibA_00104 1110034G24Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibA_00110 1110038F14Rik 1.25 2.25 1.75 0.5555556 -0.5089608

最佳答案

ggplot2具有cut_number()便利功能,可为您完成此操作。如果您不想加载该程序包的开销,可以查看ggplot2:::breaks以获得必要的逻辑。

从@MichaelChirico偷来的可复制示例:

set.seed(100)
KK<-130209L; nn<-12L
library("dplyr")
dt <- data.frame(mLow1=rnorm(KK),mHigh1=rnorm(KK),
mLow2=rnorm(KK),mHigh2=rnorm(KK),
meanLow=rnorm(KK),meanHigh=rnorm(KK),
fc=rnorm(KK),mean=rnorm(KK)) %>% arrange(mean)

向不喜欢管道的人致歉:
library("ggplot2")  ## for cut_number()
dt %>% mutate(grp=cut_number(mean,12)) %>%
group_by(grp) %>%
mutate(fc=c(scale(fc))) %>%
ungroup() %>%
select(-grp) %>% ## drop grouping variable
as.data.frame -> dt2 ## convert back to data frame, assign result

事实证明,围绕 c()scale()是必需的-否则 fc变量最终会带有一些会使 tail()混淆的属性...

同样的逻辑也应适用于 plyr或基数R split-apply-combine(关键是使用 cut_number()定义分组变量)。

关于r - 如何将数据帧逐行拆分为n个 block ,应用函数并合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31753710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com