将数据集子集到R中的多个子集中

时间:2017-12-05 17:30:12

标签: r dataset subset

我的数据看起来像这样:

structure(list(ID = structure(c(1L, 2L, 2L, 3L, 4L, 5L, 6L, 6L, 
6L), .Label = c("a", "b", "c", "d", "e", "f"), class = "factor"), 
    Value = c(10L, 13L, 12L, 43L, 23L, 66L, 78L, 42L, 19L)), .Names = c("ID", 
"Value"), class = "data.frame", row.names = c(NA, -9L))

我想根据ID值将此数据集划分为多个数据集,即一个仅包含ID = a的数据集,另一个仅包含ID = b的数据集,依此类推。

如何在R中自动进行子集化?我知道如果ID中的值数量较少,我们可以手动执行,但如果ID下有很多值,则必须有更明智的方法。

2 个答案:

答案 0 :(得分:3)

您可以使用split功能。

df <- structure(list(ID = structure(c(1L, 2L, 2L, 3L, 4L, 5L, 6L, 6L, 
6L), .Label = c("a", "b", "c", "d", "e", "f"), class = "factor"), 
    Value = c(10L, 13L, 12L, 43L, 23L, 66L, 78L, 42L, 19L)), .Names = c("ID", 
"Value"), class = "data.frame", row.names = c(NA, -9L))

> df
  ID Value
1  a    10
2  b    13
3  b    12
4  c    43
5  d    23
6  e    66
7  f    78
8  f    42
9  f    19

listed_df <- split(df, df$ID)

> listed_df
$a
  ID Value
1  a    10

$b
  ID Value
2  b    13
3  b    12

$c
  ID Value
4  c    43

$d
  ID Value
5  d    23

$e
  ID Value
6  e    66

$f
  ID Value
7  f    78
8  f    42
9  f    19

要调用其中一个,只需使用$索引它。

sum(listed_df$f$Value)

您还可以lapply列表中每个数据框的功能。如果你想总结每个价值或你能做的事情......

lapply(df_list, function(x) sum(x$Value))

您也可以通过ID grouping原始数据框执行此操作,然后从那里对其执行summarise操作。

答案 1 :(得分:0)

这应该很容易。

exampleb <- subset(df, ID == 'b')

exampleb
  ID Value
2  b    13
3  b    12

另外,请看一下这些链接。

https://www.r-bloggers.com/5-ways-to-subset-a-data-frame-in-r/

https://www.statmethods.net/management/subset.html