ループを使用して、複数の因子レベルに基づいてデータフレームをサブセット化することを回避するにはどうすればよいですか?
次の例では、目的の出力はデータフレームです。データフレームには、「コード」の値が「選択」の値のいずれかに等しい元のデータフレームの行が含まれている必要があります。
作業例:
#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
}
これは、はるかに大きなデータセットのおもちゃの例です。そのため、「選択」には多数の要素が含まれ、データには多数の行が含まれる場合があります。したがって、ループを回避したいと思います。
%in%
を使用できます
data[data$Code %in% selected,]
Code Value
1 A 1
2 B 2
7 A 3
8 A 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
ここに別のものがあります:
data[data$Code == "A" | data$Code == "B", ]
データフレームの行の長さと順序が一致する場合、サブセット化要因はデータフレームの一部である必要はありません。この場合、とにかくこの要素からデータフレームを作成しました。そう、
data[Code == "A" | Code == "B", ]
rも非常に便利な機能の1つです。