【问题标题】:How to extract a part of Data frame from the whole?如何从整体中提取一部分数据框?
【发布时间】:2019-11-02 21:42:39
【问题描述】:

我的数据框'y'

 steps date       interval
   <dbl> <date>        <int>
 1     0 2012-10-01        0
 2     0 2012-10-01        5
 3     0 2012-10-01       10
 4     0 2012-10-01       15
 5     0 2012-10-01       20
 6     0 2012-10-01       25
 7     0 2012-10-01       30
 8     0 2012-10-01       35
 9     0 2012-10-01       40
10     0 2012-10-01       45
# ... with 17,558 more rows

我想提取仅包含“steps”和“interval”列的月份==11 & day==1 的行。

代码无效

y[month(y$date)==11 & day(y$date)==1,c(y$steps,y$interval)]

我也尝试使用第一个选择然后过滤的组合,但是当我们选择()指定的列“步骤”和“间隔”时,我无法在过滤器()中应用条件,因为它取决于删除“日期”列。

有人可以向我解释解决此问题的简单方法吗?

【问题讨论】:

    标签: r dataframe select filter


    【解决方案1】:

    我假设 month()day() 来自 lubridate。使用dplyr::filterdplyr::select,此操作更容易。

    这样的东西应该可以工作(如果没有更好的示例数据很难测试):

    library(dplyr)
    library(lubridate)
    
    y %>% filter(month(date) == 11,
                 day(date) == 1) %>%
      select(steps, interval)
    

    【讨论】:

      【解决方案2】:

      使用基本 R 我们可以 format date 使用 subsetselect

      subset(df, format(date, "%d-%m") == "01-11", select = c(steps, interval))
      

      【讨论】:

      • @AnanyaVidyanathan subset 是基础 R。所以不需要库。
      【解决方案3】:

      另一种方法是删除带有str_removefilterselect 列的“年份”部分

      library(dplyr)
      library(stringr)
      Y %>% 
        filter(str_remove(date, "^\\d{4}-") == '11-01') %>%
        select(steps, interval)
      

      【讨论】:

      • @AnanyaVidyanathan 没问题。很高兴有机会回答您的问题
      猜你喜欢
      • 2019-04-10
      • 2018-02-19
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 2023-03-30
      相关资源
      最近更新 更多