gpt4 book ai didi

r - 如何根据列值在 R 中创建组件(子集)数据框?

转载 作者:行者123 更新时间:2023-12-03 07:33:59 26 4
gpt4 key购买 nike

我想根据一列中的值将数据帧拆分为多个组件数据帧。
在我的示例中,我想使用“cond”列中的值将 dat 拆分为 dat.1、dat.2 和 dat.3。
有没有一个简单的命令可以实现这一点?

dat
sub cond trial time01 time02
1 1 1 2774 8845
1 1 2 2697 9945
1 2 1 2219 9291
1 2 2 3886 7890
1 3 1 4011 9032
2 2 1 3478 8827
2 2 2 2263 8321
2 3 1 4312 7576
3 1 1 4219 7891
3 3 1 3992 6674


dat.1
sub cond trial time01 time02
1 1 1 2774 8845
1 1 2 2697 9945
3 1 1 4219 7891

dat.2
sub cond trial time01 time02
2 2 1 3478 8827
2 2 2 2263 8321
1 2 1 2219 9291
1 2 2 3886 7890

dat.3
sub cond trial time01 time02
1 3 1 4011 9032
2 3 1 4312 7576
3 3 1 3992 6674

也许是因为我是 R 新手,尽管浏览并尝试了几个类似论坛查询中提出的解决方案,但我仍然没有确定如何做到这一点。预先感谢您的任何答复。

A dput()的数据是:
structure(list(sub = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L
), cond = c(1L, 1L, 2L, 2L, 3L, 2L, 2L, 3L, 1L, 3L), trial = c(1L,
2L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L), time01 = c(2774L, 2697L,
2219L, 3886L, 4011L, 3478L, 2263L, 4312L, 4219L, 3992L), time02 = c(8845L,
9945L, 9291L, 7890L, 9032L, 8827L, 8321L, 7576L, 7891L, 6674L
)), .Names = c("sub", "cond", "trial", "time01", "time02"), class = "data.frame", row.names = c(NA,
-10L))

最佳答案

我认为最简单的方法是通过 split :

split(dat, dat$cond)

但是请注意,拆分返回一个 data.frames 列表。

要从列表中获取单个 data.frames,您可以按如下方式使用循环生成单个对象(隐含在 lapply 语句中):
tmp <- split(dat, dat$cond)
lapply(1:length(tmp), function(x) assign(paste("dat.", x, sep = ""), tmp[[x]], envir = .GlobalEnv))

但是,使用列表可能更多 R ish,从长远来看会更有用。

感谢 Gavin 发布数据!

关于r - 如何根据列值在 R 中创建组件(子集)数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6278133/

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