我每天使用子集,但是当我尝试使用索引向量在循环内进行子集以指定子集条件时,最近遇到了问题。请参阅下面的示例,其中因子没有正确分配?
我试图强迫它成为一个没有运气的因素。我确定这是我的问题,而不是那个子集是错误的。我无法弄清楚我做错了什么?
##make df
df<-data.frame(factor=c("red","green","green","blue"), Numeric=c(1:3,3))
## subset by numeric
Numeric<-unique(df$Numeric)
for(i in 1:length(Numeric)){
print(subset(df, Numeric==Numeric[i]))
}
##this works as expected
factor Numeric
1 red 1
factor Numeric
2 green 2
factor Numeric
3 green 3
4 blue 3
## subset by facor
factor<-unique(df$factor)
for(j in 1:length(factor)){
print(subset(df, factor==factor[[j]]))
}
##This runs, but fails, green is subsetted twice and blue is missed
factor Numeric
1 red 1
factor Numeric
2 green 2
3 green 3
factor Numeric
2 green 2
3 green 3
答案 0 :(得分:2)
我不认为这与名称因素有关。&#39;。请参阅这些按预期成功的实例:
for(j in unique(df$factor) ){
print(subset(df, factor==j))
}
#-----
factor Numeric
1 red 1
factor Numeric
2 green 2
3 green 3
factor Numeric
4 blue 3
for(j in factor ){
print(subset(df, factor==j))
}
#------
factor Numeric
1 red 1
factor Numeric
2 green 2
3 green 3
factor Numeric
4 blue 3
第一个例子将通过被承认的不明智名称&#34;因素&#34;来消除对外部对象的需要。帮助页面的警告明确适用于for
- 在循环中使用的循环。
答案 1 :(得分:2)
我认为@ 42-并且我可能根本就没有很好地沟通,所以为了清楚起见,我在评论中提到的只是改变第二个例子如下:
> f<-unique(df$factor)
> f
[1] red green blue
Levels: blue green red
> for(j in 1:length(f)){
+ print(subset(df, factor==f[j]))
+ }
factor Numeric
1 red 1
factor Numeric
2 green 2
3 green 3
factor Numeric
4 blue 3
似乎会产生正确的结果,因此我的结论是subset
发现了错误的factor
。