Skip to content
Prev 389186 / 398506 Next

How to remove all rows that have a numeric in the first (or any) column

Calling something a data.frame does not make it a data.frame.

The abbreviated object shown below is a list of singletons. If it is a column in a larger object that is a data.frame, then it is a list column which is valid but can be ticklish to handle within base R but less so in the tidyverse.

For example, if I try to make a data.frame the normal way, the list gets made into multiple columns and copied to each row. Not what was expected. I think some tidyverse functionality does better.

Like this:

library(tidyverse)
temp=list("Hello", 1, 1.1, "bye")

Now making a data.frame has an odd result:
alpha beta..Hello. beta.1 beta.1.1 beta..bye.
1     1        Hello      1      1.1        bye
2     2        Hello      1      1.1        bye
3     3        Hello      1      1.1        bye
4     4        Hello      1      1.1        bye

But a tibble handles it:
# A tibble: 4 x 2
alpha beta     
<int> <list>   
  1     1 <chr [1]>
  2     2 <dbl [1]>
  3     3 <dbl [1]>
  4     4 <chr [1]>

So if the data does look like this, with a list column, but access can be tricky as subsetting a list with [] returns a list and you need [[]].

I found a somehwhat odd solution like this:

mydf %>%
   filter(!map_lgl(beta, is.numeric)) -> mydf2
# A tibble: 2 x 2
alpha beta     
<int> <list>   
  1     1 <chr [1]>
  2     4 <chr [1]>

When I saved that result into mydf2, I got this.

Original:
  
  > str(mydf)
tibble [4 x 2] (S3: tbl_df/tbl/data.frame)
$ alpha: int [1:4] 1 2 3 4
$ beta :List of 4
..$ : chr "Hello"
..$ : num 1
..$ : num 1.1
..$ : chr "bye"

Output when any row with a numeric is removed:
tibble [2 x 2] (S3: tbl_df/tbl/data.frame)
$ alpha: int [1:2] 1 4
$ beta :List of 2
..$ : chr "Hello"
..$ : chr "bye"

So if you try variations on your code motivated by what I show, good luck. I am sure there are many better ways but I repeat, it can be tricky.

-----Original Message-----
From: R-help <r-help-bounces at r-project.org> On Behalf Of Jeff Newmiller
Sent: Tuesday, September 14, 2021 11:54 PM
To: Gregg Powell <g.a.powell at protonmail.com>
Cc: Gregg Powell via R-help <r-help at r-project.org>
Subject: Re: [R] How to remove all rows that have a numeric in the first (or any) column

You cannot apply vectorized operators to list columns... you have to use a map function like sapply or purrr::map_lgl to obtain a logical vector by running the function once for each list element:

sapply( VPN_Sheet1$HVA, is.numeric )
On September 14, 2021 8:38:35 PM PDT, Gregg Powell <g.a.powell at protonmail.com> wrote:
--
Sent from my phone. Please excuse my brevity.

______________________________________________
R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.