在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