замените 0 и -ve значения на r и конвертируйте из ежечасного в ежедневный - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть один файл с 38 столбцами и 78880 строк. Некоторые столбцы имеют 0 и отрицательные значения. Я хочу заменить 0 и отрицательные значения NaN во всех столбцах.

Я пытался

replace(new_file, which(new_file <= 0), NA)

Но это не работает.

После этого данный файл находится в почасовых данных. Поэтому мне нужно преобразовать в ежедневный и сохранить все 38 столбцов в новый файл с датой (ГГГГ-ММ-ДД).

Date       Var1  Var2  Var3  ......
2009-01-01  
2009-01-02
2009-01-03

1 Ответ

0 голосов
/ 18 сентября 2018

Сначала давайте создадим фиктивные данные:

N <- 10
df <- data.frame(Date=rep("2018-09-18", N), 
                 Var1=rnorm(N), 
                 Var2=rnorm(N), 
                 Var3=rnorm(N))
df

выглядит как:

         Date      Var1      Var2       Var3
1  2018-09-18  0.7806645  1.06439912 -0.82916929
2  2018-09-18  0.8206491  2.22059077 -0.12357957
3  2018-09-18 -0.4384802  0.56787833  0.50516721
4  2018-09-18 -0.5979955  0.10862365  0.42544565

Теперь давайте напишем функцию для работы с одним столбцом (т.е. вектором). ifelse удобно, потому что оно уже векторизовано .

# Function handling one vector
fix_negative_values <- function(vec) {
  ifelse(vec > 0, vec, NA)
}

Используя dplyr для простоты манипулирования данными, мы применяем fix_negative_values ко всем столбцам, кроме даты.

library(dplyr)
df %>% mutate_at(vars(-Date), fix_negative_values)

Это дает:

         Date      Var1      Var2       Var3
1  2018-09-18 0.7806645 1.0643991         NA
2  2018-09-18 0.8206491 2.2205908         NA
3  2018-09-18        NA 0.5678783 0.50516721
4  2018-09-18        NA 0.1086236 0.42544565

Если вы хотите превратить почасовые данные в ежедневные, вы найдете dplyr полезным, поскольку вы можете group_by(date), а затем summarize_at(vars(-Date), funs(mean(., na.rm=T))), чтобы получить среднесуточное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...