我有以下玩具数据集:
dat = data.frame(
country = c("USA", "USA", "USA", "UK", "UK", "UK"),
year = c(2000, 2001, 2002, 2000, 2001, 2002),
apples.k = c(100, 60, 123, 340, 200, 235),
pears.k = c(99, 88, 77, 22, 33, 44)
)
数据如下:
dat
country year apples.k pears.k
1 USA 2000 100 99
2 USA 2001 60 88
3 USA 2002 123 77
4 UK 2000 340 22
5 UK 2001 200 33
6 UK 2002 235 44
但是,我需要能够通过dat[1]
调用数据集并获得以下信息:
$USA
year apples.k pears.k
2000 100 99
2001 60 88
2002 123 77
...与英国(dat[2]
)相同:
$UK
year apples.k pears.k
2000 340 22
2001 200 33
2002 235 44
因此,据我所知,新对象中的每个条目都应该是变量子系统(“ year”,“ apples.k”,“ pears.k”)的矩阵。而且每个国家(美国和英国)都有这个“变量子系统矩阵”。
实际上,我对世界上每个国家有将近300年的历史,大约有6个变量。
谢谢。
答案 0 :(得分:3)
为此提供了一个函数,方便命名为split()
:
dat <- split(dat, dat$country)
> dat
$UK
country year apples.k pears.k
4 UK 2000 340 22
5 UK 2001 200 33
6 UK 2002 235 44
$USA
country year apples.k pears.k
1 USA 2000 100 99
2 USA 2001 60 88
3 USA 2002 123 77
答案 1 :(得分:1)
如果您编写函数,则无需修改dat
foo = function(n, x = dat, f = "country"){
nm = unique(x[[f]])[n]
setNames(list(subset(x, x[[f]] == nm)), nm)
}
foo(1)
#$USA
# country year apples.k pears.k
#1 USA 2000 100 99
#2 USA 2001 60 88
#3 USA 2002 123 77
答案 2 :(得分:1)
我们可以使用group_split
library(dplyr)
dat %>%
group_split(country)
#[[1]]
# A tibble: 3 x 4
# country year apples.k pears.k
# <fct> <dbl> <dbl> <dbl>
#1 UK 2000 340 22
#2 UK 2001 200 33
#3 UK 2002 235 44
[[2]]
# A tibble: 3 x 4
# country year apples.k pears.k
# <fct> <dbl> <dbl> <dbl>
#1 USA 2000 100 99
#2 USA 2001 60 88
#3 USA 2002 123 77