首页 文章

按多个因子级别子集数据帧[重复]

提问于
浏览
17

这个问题在这里已有答案:

如何避免使用循环根据多个因子级别对数据帧进行子集化?

在以下示例中,我想要的输出是数据帧 . 数据框应包含原始数据帧的行,其中“Code”中的值等于“selected”中的值之一 .

工作范例:

#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
}

这是一个更大的数据集的玩具示例,因此“选中”可能包含大量元素,而数据包含大量行 . 因此我想避免循环 .

3 回答

  • 4

    你可以用 %in%

    data[data$Code %in% selected,]
      Code Value
    1    A     1
    2    B     2
    7    A     3
    8    A     4
    
  • 32

    试试这个:

    > 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
    
  • 4

    这是另一个:

    data[data$Code == "A" | data$Code == "B", ]
    

    还值得一提的是,如果子集因子在长度和顺序上与数据帧行匹配,则不必是数据帧的一部分 . 在这种情况下,无论如何我们从这个因素制作了数据框 . 所以,

    data[Code == "A" | Code == "B", ]
    

    也有效,这是关于R真正有用的事情之一 .

相关问题