Как определить тип класса и изменение в R - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть набор данных, где первая строка - это заголовок, вторая строка - это некоторые пояснительные данные, а затем строки 3 on - это числа. Потому что, когда я читаю данные с этой второй пояснительной строкой, классы автоматически преобразуются в факторы (или я мог бы указать stringsasfactors = F).

То, что я хотел бы сделать, это удалить вторую строку и иметь функцию, которая просматривает все столбцы и определяет, являются ли они просто числами, и изменяет тип класса на соответствующий тип. Есть что-то подобное? Возможно, используя dplyr? У меня много столбцов, поэтому я хотел бы избежать их переназначения вручную.

Упрощенный пример ниже

> df <- data.frame(A = c("col 1",1,2,3,4,5), B = c("col 2",1,2,3,4,5))
> df
      A     B
1 col 1 col 2
2     1     1
3     2     2
4     3     3
5     4     4
6     5     5

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

если все числа идут после второй строки, то мы можем сделать это

library(tidyverse)
df[-1, ] %>% mutate_all(as.numeric)

в зависимости от задачи, которую можно выполнить следующим образом

df <- tibble(A = c("col 1",1,2,3,4,5), 
                 B = c("col 2",1,2,3,4,5),
                 C = c(letters[1:5], 6))

df[-1, ] %>% mutate_if(~ any(!is.na(as.numeric(.))), as.numeric)
      A     B     C
  <dbl> <dbl> <dbl>
1     1     1    NA
2     2     2    NA
3     3     3    NA
4     4     4    NA
5     5     5     6

или около того

df[-1, ] %>% mutate_if(~ all(!is.na(as.numeric(.))), as.numeric)

      A     B C    
  <dbl> <dbl> <chr>
1     1     1 b    
2     2     2 c    
3     3     3 d    
4     4     4 e    
5     5     5 6  
0 голосов
/ 23 апреля 2020

В base R мы можем просто сделать

df[-1] <- lapply(df[-1], as.numeric)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...