Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中将数据集子集为多个子集_R_Dataset_Subset - Fatal编程技术网

在R中将数据集子集为多个子集

在R中将数据集子集为多个子集,r,dataset,subset,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.

我有一个类似以下内容的数据:

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下有很多值,则必须有一种更智能的方法来执行此操作。

您可以使用
拆分功能

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
您还可以跨列表中的每个数据帧使用函数。如果你想总结每一个价值或你能做的事情

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

您也可以通过按ID对原始数据帧进行分组,然后在此基础上对原始数据帧执行汇总操作来实现这一点。

这应该非常简单

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

exampleb
  ID Value
2  b    13
3  b    12

exampleb我如何将它们分配为单独的数据帧?基本上,我希望有data1、data2、data3、data4、data5、data6,它们分别包含id a、b、c、d、e、f,即使由于分组选项的缘故,这些通常是不必要的,尽管这取决于上下文。是的,split将数据集划分为我想要的子集。但是我还需要将这些子集作为单独的数据帧,比如分别包含id a、b、c、d、e、f的data1、data2、data3、data4、data5、data6。我该怎么做?我回答了你的要求
listed_df$a
是您正在谈论的数据帧。
>class(df_list$a)[1]“data.frame”
正确-您要问的是如何自动执行第一步以及手动执行所有后续步骤。Matt正在尝试向您演示如何自动完成所有步骤。您可以自己尝试。x是列表中的每个数据帧。因此,您正在查看“a”df,并执行df$a[1],这将拉出第一列。因此,您使用
lappy
调用迭代每个df,以显示每个df的第一列。
exampleb <- subset(df, ID == 'b')

exampleb
  ID Value
2  b    13
3  b    12