如何使用条件打印数据框的某些行

时间:2017-06-02 11:02:05

标签: r indexing printing

从下面的data.frame中,我想使用print()函数简单地打印出具有" red"的任何行的行信息(日期和温度)。警告变量。我试过索引,但没有运气! TIA

              date  temp warnings
            <dttm> <dbl>    <chr>
 1 2017-04-16 10:00:00  26.3    black
 2 2017-04-17 10:00:00  25.7    black
 3 2017-04-18 10:00:00  25.4    black
 4 2017-04-19 10:00:00  25.6    black
 5 2017-04-20 10:00:00  25.9    black
 6 2017-04-21 10:00:00  26.1    black
 7 2017-04-22 10:00:00  27.8    red
 8 2017-04-23 10:00:00  26.3    black
 9 2017-04-24 10:00:00  26.1    black
10 2017-04-25 10:00:00  26.6    black

谢谢大家!我有一个玩你的建议并设法打印虽然有没有这样做,而不打印列标题?

df[df$warnings == 'red', c('date', 'temp')]
# A tibble: 2 x 2
                 date  temp
               <dttm> <dbl>
1 2017-05-27 10:00:00  27.8
2 2017-05-29 10:00:00  27.7

2 个答案:

答案 0 :(得分:1)

我用于这样的任务包&#39; dplyr&#39;。

install.packages(dplyr)
library(dplyr)
filter(my_df, warnings =='red')

其中my_df是您的表名。

答案 1 :(得分:0)

ValueTuple<...>

仅选择那些警告为红色的行,按列号

仅选择两列
> library("readr")
> red2=read_csv("red.csv")
Parsed with column specification:
cols(
  date = col_character(),
  temp = col_double(),
  warning = col_character()
)
> red2
# A tibble: 10 x 3
              date  temp warning
             <chr> <dbl>   <chr>
 1 4/16/2017 10:00  26.3   black
 2 4/17/2017 10:00  25.7   black
 3 4/18/2017 10:00  25.4   black
 4 4/19/2017 10:00  25.6   black
 5 4/20/2017 10:00  25.9   black
 6 4/21/2017 10:00  26.1   black
 7 4/22/2017 10:00  27.8     red
 8 4/23/2017 10:00  26.3   black
 9 4/24/2017 10:00  26.1   black
10 4/25/2017 10:00  26.6   black
> library(lubridate)

Attaching package: ‘lubridate’

The following object is masked from ‘package:base’:

    date

> red2$date=mdy_hm(red2$date)
> red2
# A tibble: 10 x 3
                  date  temp warning
                <dttm> <dbl>   <chr>
 1 2017-04-16 10:00:00  26.3   black
 2 2017-04-17 10:00:00  25.7   black
 3 2017-04-18 10:00:00  25.4   black
 4 2017-04-19 10:00:00  25.6   black
 5 2017-04-20 10:00:00  25.9   black
 6 2017-04-21 10:00:00  26.1   black
 7 2017-04-22 10:00:00  27.8     red
 8 2017-04-23 10:00:00  26.3   black
 9 2017-04-24 10:00:00  26.1   black
10 2017-04-25 10:00:00  26.6   black

现在要解决大数据的问题,我模拟数据更大

>     red2[red2$warning=="red",1:2]
# A tibble: 1 x 2
                 date  temp
               <dttm> <dbl>
1 2017-04-22 10:00:00  27.8

现在要打印出没有列标题的数据,我们使用带有How do you delete the header in a dataframe?的dimnames = NULL的矩阵

> red3=red2[rep(seq_len(nrow(red2)), each=2000000),]
> str(red3)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':       20000000 obs. of  3 variables:
 $ date   : POSIXct, format: "2017-04-16 10:00:00" "2017-04-16 10:00:00" ...
 $ temp   : num  26.3 26.3 26.3 26.3 26.3 26.3 26.3 26.3 26.3 26.3 ...
 $ warning: chr  "black" "black" "black" "black" ...
> system.time(red3[red3$warning=="red",1:2])
   user  system elapsed 
   0.17    0.06    0.24