2

我在 R 中有一个 data.frame。我想使用循环子集函数创建三个不同的 data.frame。我有一个很大的data.frame,但我需要的是下面的示例:

sex<-c("M","M","M","F","M","F")
age<-c(20,18,17,20,18,17)
name<-c("John", "Joseph", "Bill", "Sarah", "Robert", "Dana")
data<-data.frame(sex, age, name)

>data
        sex  age   name
    1   M    20    John
    2   M    18    Joseph
    3   M    17    Bill
    4   F    20    Sarah
    5   M    18    Robert
    6   F    17    Dana

我想要的是:

>age17
      sex   age   name
    1 M     17    Bill
    2 F     17    Dana

>age18
      sex   age   name
    1 M     18    Joseph
    2 M     18    Robert


>age20
      sex   age   name
    1 M     20    John
    2 F     20    Sarah

我可以使用以下命令:

>age17<-subset(data, data[,2]==17)
>age18<-subset(data, data[,2]==18)
>age20<-subset(data, data[,2]==20)

但是可以使用循环来减小命令的大小吗?

4

1 回答 1

6

使用split

x <- split(data, data$age)

x
$`17`
  sex age name
3   M  17 Bill
6   F  17 Dana

$`18`
  sex age   name
2   M  18 Joseph
5   M  18 Robert

$`20`
  sex age  name
1   M  20  John
4   F  20 Sarah

您现在有一个数据框列表,您可以使用任何提取运算符访问列表中的元素,$[[[

例如,第一个元素:

x[1]
$`17`
  sex age name
3   M  17 Bill
6   F  17 Dana

或者带有 name 的元素17。但请注意,您必须使用反引号来引用这些名称,因为以数字开头的名称不是标准的:

x$`17`
  sex age name
3   M  17 Bill
6   F  17 Dana
于 2012-07-13T15:38:47.237 回答