首页 文章

基于一列的条件对数据帧进行子集化[重复]

提问于
浏览
0

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

我有一个很大的数据框架 . 我想根据一列值的条件制作一个子集 . 说:

a<-data.frame(x=rep(1:5,5),y=rnorm(25),z=runif(25))

我想根据列 x 的值创建一个子集 . 例如,获取 x=c(2,3,5) 的值并创建另一个数据帧 .

3 回答

  • 2

    我们可以用 %in%

    a1 <- a[a$x %in% x,]
    

    仅用于对“x”列进行子集化

    a1 <- a[a$x %in% x, "x", drop=FALSE]
    

    如果我们需要将列'x'的子集设置为基于 x 向量创建 vector

    v1 <- a$x[a$x %in% x]
    
  • 3

    或者您可以使用 subset

    filter <- c(2,5)
    subset(a, x %in% filter)
    

    或等效地:

    subset(a, match(x, filter, nomatch = 0)>0)
    

    要么

    a[match(a$x, filter, nomatch = 0)>0,]
    
       # x           y         z
    # 2  2  0.76230930 0.9704342
    # 5  5 -1.61846247 0.5786633
    # 7  2  0.94024182 0.2805524
    # 10 5 -0.08851427 0.6426568
    # 12 2  0.78745436 0.1129637
    # 15 5 -2.41274754 0.4826690
    # 17 2 -0.37616238 0.9518877
    # 20 5  1.18745381 0.8110062
    # 22 2  0.03233245 0.4599623
    # 25 5 -2.28360189 0.4836900
    
  • 1

    我们可以在 dplyr 包中使用值匹配函数 %in%filter 动词(一个很棒的数据包处理包) .

    library(dplyr)
    a1 <- data.frame(x = rep(1:5,5), y=rnorm(25), z=runif(25))
    a2 <- filter(a1, x %in% c(2,3,5))
    
    > a2
       x           y         z
    1  2  0.28184946 0.3564756
    2  3  0.05634123 0.9826746
    3  5 -0.58611510 0.8119334
    4  2  0.45211282 0.6267487
    5  3 -0.64741961 0.7600619
    6  5 -0.28781978 0.3216957
    7  2  0.51440342 0.5165707
    8  3  1.41958340 0.2328647
    9  5 -0.27751501 0.5400576
    10 2 -0.74835287 0.7976089
    11 3  2.42364991 0.4141980
    12 5  0.22175161 0.1051387
    13 2  1.54876157 0.6408956
    14 3  0.54940989 0.3968186
    15 5 -1.16333440 0.9359615
    

相关问题