【问题标题】:How to extract (or subset) all the rows with a condition on a column in a dataframe?如何在数据框中的列上提取(或子集)具有条件的所有行?
【发布时间】:2011-03-27 07:46:32
【问题描述】:

我有以下数据框,并希望提取与状态==1 的同一组对应的所有行。

状态栏为 0 或 1。

df<-data.frame(time= rep(1:4,times=c(2,3,5,4)),status=c(0,0,1,1,0,0,0,0,0,0,1,0,0,0))

  Input Data 

   time status

1     1      0
2     1      0
3     2      1
4     2      1
5     2      0
6     3      0
7     3      0
8     3      0
9     3      0
10    3      0
11    4      1
12    4      0
13    4      0
14    4      0

所需的输出(按顺序重新编号组列)。

time status

   1      1
   1      1
   1      0
   2      1
   2      0
   2      0
   2      0

我的实际 data.frame 的维度是 10^6 x 5。

感谢您的帮助。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    嗯,所以你想得到第 2 组和第 4 组,因为这两个组都有状态 1 值,对吗?您希望从这两组中获得全部输出?

    如果是这样,怎么样:

    df <- data.frame(time = rep(1:4, times = c(2,3,5,4)),
                     status = c(0,0,1,1,0,0,0,0,0,0,1,0,0,0))
    
    id <- unique(df[df$status == 1, "time"])
    df2 <- df[df$time %in% id, ]
    

    编辑:

    df2$time <- factor(df2$time, labels = c(1,2))
    

    【讨论】:

    • @mropa。是的,这就是我希望时间列从 (2,2,2) 和 (4,4,4,4) 到 (1,1,1) 和 (2,2,2,2) 顺序重新编号的结果) 分别。谢谢
    • @Tony 哦,我错过了重新编号的部分。我只是改变了我的答案
    【解决方案2】:

    当您尝试做两件不同的事情时,我有点困惑 - 首先要提取状态 == 1 的行,而在您想要的输出中,有些行带有零。 这是提取状态 == 1 的行的方法之一。

    df1 <- data.frame(time= rep(1:4,times=c(2,3,5,4)),status=c(0,0,1,1,0,0,0,0,0,0,1,0,0,0))
    df1$time <- factor(df1$time)
    df1s <- split(df1, df1$time)
    df1l <- lapply(df1s, function(x) {
                x[x$status == 1, ]
            })
    df1l <- do.call("rbind", df1l)
    

    反之亦然

    df2 <- df1[df1$status == 1, ]
    df2.l <- split(df2, as.factor(df2$time))
    

    【讨论】:

    • 很抱歉给您带来了困惑。您如何将 df1l 转换为 df- 谢谢
    • 您可以使用 do.call("rbind", df1l) 将列表“煎饼”到 data.frame 中。
    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多