【问题标题】:Subset from a data.frame to form a list of smaller dataframes来自 data.frame 的子集以形成较小数据帧的列表
【发布时间】:2021-12-26 04:49:50
【问题描述】:

我想知道如何将我的玩具 data 拆分到下面,以便我得到一个较小的 dataf.rames 列表,其中每个包含一对独特的 group

我的desired_output 如下所示。在R 中是否可以进行这样的子集化?

由于这是一个玩具 data,我非常感谢一个实用的答案,其中列的名称或它们的数字可以与这个玩具 data 不同。

m=
  "
    y   group time outcome
    7   a     1    A
    3   a     0    B
    6   a     1    B
    5   b     0    A
    9   b     1    A
    4   b     0    B"

data <- read.table(text = m, h=T)


desired_output <-
list(
  data.frame(y =   5   , group =   "b"     , time =   0   , outcome =       "A" ),
  data.frame(y = c(7,9), group = c("a","b"), time = c(1,1), outcome = c("A","A")),
  data.frame(y = c(3,4), group = c("a","b"), time = c(0,0), outcome = c("A","A")),
  data.frame(y =   6   , group =   "a"     , time =   1   , outcome =       "B"))

[[1]]
  y group time outcome
1 5     b    0       A

[[2]]
  y group time outcome
1 7     a    1       A
2 9     b    1       A

[[3]]
  y group time outcome
1 3     a    0       A
2 4     b    0       A

[[4]]
  y group time outcome
1 6     a    1       B
 

【问题讨论】:

  • 唯一组对是什么意思?排列还是组合?对我来说,您的 list[2] 和 list[3] 具有相同的组配对,因此不清楚区别在哪里。还有 list[1] 和 list[4] 甚至没有“对”组...?
  • @tjebo,如果你看看我的desired_output,你会发现所有可能的group 值总是对比的,例如list[[2]]list[[3]],而其他变量(在这个玩具中@987654332 @、outcometime) 对它们保持相同。当group 值无法对比时(如list[[1]]list[[4]]),则数据原封不动地返回。

标签: r list dataframe subset


【解决方案1】:

假设问题是要求将输入拆分为具有相同时间和结果的行,我们可以使用split,如下所示。没有使用任何包。

split(data, data[3:4])

给予:

$`0.A`
  y group time outcome
4 5     b    0       A

$`1.A`
  y group time outcome
1 7     a    1       A
5 9     b    1       A

$`0.B`
  y group time outcome
2 3     a    0       B
6 4     b    0       B

$`1.B`
  y group time outcome
3 6     a    1       B

【讨论】:

    猜你喜欢
    • 2020-06-29
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2021-04-26
    • 2019-11-10
    • 1970-01-01
    相关资源
    最近更新 更多