我的数据看起来像这样:
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下有很多值,则必须有更明智的方法。
答案 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/