使用循环在data.frame中进行子集化

时间:2017-03-13 20:23:46

标签: r loops dataframe

我在使用不同data.frames的循环时遇到问题,无法选择某些行。这是一个简单的例子。

我这里有三个data.frames:

Died.At <- c(22,40,72,41)
Writer.At <- c(16, 18, 36, 36)
Sex <- c("MALE", "MALE", "MALE", "FEMALE")
europe<-data.frame(Died.At, Writer.At, First.Name, Second.Name, Sex)

Died.At <- c(22,40,72,41)
Writer.At <- c(50, 28, 46, 16)
Sex <- c("MALE", "MALE", "MALE", "FEMALE")
africa<-data.frame(Died.At, Writer.At, First.Name, Second.Name, Sex)

Died.At <- c(22,40,72,41)
Writer.At <- c(30, 18, 96, 66)
Sex <- c("MALE", "MALE", "MALE", "FEMALE")
asia<-data.frame(Died.At, Writer.At, First.Name, Second.Name, Sex)

我想选择[Writer.At&lt; = 20]的个人而且我想用这些个人重写每个数据库。所以我尝试了这个:

for (i in c(europe,africa,asia)){
  A.i<-i[i$Writer.At>=20]
}

我得到的是这个警告:i $ Writer.At:$运算符对原子向量无效

我不明白为什么。你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您的解决方案不起作用,因为“i”指的是每个数据框中的值,而不是数据框的名称。一个解决方案是这样的:

declare variable $foo external;

concat("Value of $foo is: ", $foo)

或者,您可以组合列表中的数据框并执行以下操作:

for (i in c("europe","africa","asia")){
  df<-get(i)
  df<-df[df$Writer.At>=20,]
  assign(paste0("A",i), df)
}