23

複数の因子レベルに基づいてデータフレームをサブセット化するためにループを使用しないようにするにはどうすればよいですか?

次の例では、目的の出力はデータフレームです。データフレームには、「コード」の値が「選択」の値のいずれかと等しい元のデータフレームの行が含まれている必要があります。

作業例:

#sample data
Code<-c("A","B","C","D","C","D","A","A")
Value<-c(1, 2, 3, 4, 1, 2, 3, 4)
data<-data.frame(cbind(Code, Value))

selected<-c("A","B") #want rows that contain A and B

#Begin subsetting
result<-data[which(data$Code==selected[1]),]
s1<-2
while(s1<length(selected)+1)
{
  result<-rbind(result,data[which(data$Code==selected[s1]),])
  s1<-s1+1
}

これは非常に大きなデータセットのおもちゃの例であるため、「選択」には多数の要素と多数の行のデータが含まれる場合があります。したがって、ループを回避したいと思います。

4

3 に答える 3

42

使用できます%in%

  data[data$Code %in% selected,]
  Code Value
1    A     1
2    B     2
7    A     3
8    A     4
于 2013-10-20T22:11:26.627 に答える
4

これを試して:

> data[match(as.character(data$Code), selected, nomatch = FALSE), ]
    Code Value
1      A     1
2      B     2
1.1    A     1
1.2    A     1
于 2013-10-20T22:05:55.887 に答える