Объединение данных из 2 файлов по дате
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 29 июл 2015, 10:49
- Репутация: 0
Объединение данных из 2 файлов по дате
R version 3.2.1
Есть два файла с данными (А1.csv и А2.csv на диске D).
А1 - пятидневные (понедельник-пятница).
А2 - даты могут не совпадать с датами А1.
Нужно - обьеденение данных из 2 файлов по дате в один, точнее столбец Х из А2 вставить в А1.
По следующим условия:
1. Ищем дату - если есть, ставим Х в эту строку (фаил с примером A3).
2. Если нет - ставим Х на ближнюю, но на 1 шаг назад (фаил с примером A3).
3. Заполняем пустые строки предыдущими значениями Х (фаил с примером A4).
4. Удаляем строки с пустыми значениями столбца Х
5. Выгружаем полученое на диск D в Файл А5
Возможно ли в R такое сделать? Кому не сложно напишите код с коментами
(чтоб самому вникнуть была возможнось) или посоветуйте где можно
такое сделать простыми средствами. Спасибо.
Есть два файла с данными (А1.csv и А2.csv на диске D).
А1 - пятидневные (понедельник-пятница).
А2 - даты могут не совпадать с датами А1.
Нужно - обьеденение данных из 2 файлов по дате в один, точнее столбец Х из А2 вставить в А1.
По следующим условия:
1. Ищем дату - если есть, ставим Х в эту строку (фаил с примером A3).
2. Если нет - ставим Х на ближнюю, но на 1 шаг назад (фаил с примером A3).
3. Заполняем пустые строки предыдущими значениями Х (фаил с примером A4).
4. Удаляем строки с пустыми значениями столбца Х
5. Выгружаем полученое на диск D в Файл А5
Возможно ли в R такое сделать? Кому не сложно напишите код с коментами
(чтоб самому вникнуть была возможнось) или посоветуйте где можно
такое сделать простыми средствами. Спасибо.
- Вложения
-
- А1_А5.zip
- (1.53 КБ) 420 скачиваний
-
- А1_А5.jpg (106.98 КБ) 10678 просмотров
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Объединение данных из 2 файлов по дате
домашние задания делаем сами. Прочитав help для функций merge() и match()
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 29 июл 2015, 10:49
- Репутация: 0
Re: Объединение данных из 2 файлов по дате
Спасибо. С обьеденением через merge() разобрался.
А вот заменить NA предыдущими значениями не получается.
Помогите если несложно на примере.
A <- c(NA, 2, 3, NA, 5)
B <- c(10, NA, 30, 40, NA)
C <- c(100, NA, NA, NA, 500)
x <- data.frame(A, B, C) #создадим data.frame из векторов A, B, C.
Получилось следующее -
A B C
1 NA 10 100
2 2 NA NA
3 3 30 NA
4 NA 40 NA
5 5 NA 500
Нужно заменить NA предыдущими значениями, чтобы получилось вот так -
A B C
1 NA 10 100
2 2 10 100
3 3 30 100
4 3 40 100
5 5 40 500
Так как для первой строки столбца А нет предыдущего значения,
то остается NA, потом или вырежу строку или заменю нулем.
x[is.na(x)] <- 0
А вот заменить NA предыдущими значениями не получается.
Помогите если несложно на примере.
A <- c(NA, 2, 3, NA, 5)
B <- c(10, NA, 30, 40, NA)
C <- c(100, NA, NA, NA, 500)
x <- data.frame(A, B, C) #создадим data.frame из векторов A, B, C.
Получилось следующее -
A B C
1 NA 10 100
2 2 NA NA
3 3 30 NA
4 NA 40 NA
5 5 NA 500
Нужно заменить NA предыдущими значениями, чтобы получилось вот так -
A B C
1 NA 10 100
2 2 10 100
3 3 30 100
4 3 40 100
5 5 40 500
Так как для первой строки столбца А нет предыдущего значения,
то остается NA, потом или вырежу строку или заменю нулем.
x[is.na(x)] <- 0
-
- Интересующийся
- Сообщения: 40
- Зарегистрирован: 11 авг 2011, 13:23
- Репутация: 15
Re: Объединение данных из 2 файлов по дате
Можно так:
Код: Выделить всё
A <- c(NA, 2, 3, NA, 5)
B <- c(10, NA, 30, 40, NA)
C <- c(100, NA, NA, NA, 500)
X <- data.frame(A, B, C) #создадим data.frame из векторов A, B, C.
options(warn=-1) # Временно отключаем предупреждения
X_rep<-apply(X, 2, function(x){
while (max(which(is.na(x)))>1){ # Цикл для случая нескольких NA подряд
Mask<-which(is.na(x)) # Индексы NA значений
Mask<-Mask - 1 # Смещаем индексы на 1
Mask[Mask<1]<-NA # Случай, когда предыдущих значений нет
x[is.na(x)]<-x[Mask]
}
return(x)
})
options(warn=0)
> X_rep
A B C
[1,] NA 10 100
[2,] 2 10 100
[3,] 3 30 100
[4,] 3 40 100
[5,] 5 40 500
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Объединение данных из 2 файлов по дате
не портите педагогический процесс, у пионэра, похоже, сессия
и вообще, это не так делается, а за один проход - идем вдоль вектора, всегда запоминаем последнее не NA, и заменяем на него все NA, которые встречаются. Сделать это можно либо циклом, либо итератором, в последнем случае нужен доступ на запись к внешним переменным (из глобального environment). Пионэр должен изучить разные for, apply, tapplay, sapplay и assign, environment
но программу пусть напишет сам.
и вообще, это не так делается, а за один проход - идем вдоль вектора, всегда запоминаем последнее не NA, и заменяем на него все NA, которые встречаются. Сделать это можно либо циклом, либо итератором, в последнем случае нужен доступ на запись к внешним переменным (из глобального environment). Пионэр должен изучить разные for, apply, tapplay, sapplay и assign, environment
но программу пусть напишет сам.
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 29 июл 2015, 10:49
- Репутация: 0
Re: Объединение данных из 2 файлов по дате
Иван Стрельников
Большое спасибо, работает. Вот только если NA в столбце А не только
в первой, а к примеру еще и во второй строке, то R виснет намертво.
gamm
Не пионер, а старый маразматик. Простите за беспокойство.
Большое спасибо, работает. Вот только если NA в столбце А не только
в первой, а к примеру еще и во второй строке, то R виснет намертво.
gamm
Не пионер, а старый маразматик. Простите за беспокойство.
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Объединение данных из 2 файлов по дате
звиняйте, дядькоsin2000 писал(а):Не пионер, а старый маразматик. Простите за беспокойство.
держите:
Код: Выделить всё
x<-c(NA,1,2,NA,NA,NA,1,NA)
old.val<-NA
for(i in 1:length(x)) {
if(is.na(x[i])) {
x[i]<-old.val
} else {
old.val<-x[i]
}
}
x
# [1] NA 1 2 2 2 2 1 1
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 29 июл 2015, 10:49
- Репутация: 0
Re: Объединение данных из 2 файлов по дате
gamm
Большое спасибо, работает отлично.
Большое спасибо, работает отлично.
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Объединение данных из 2 файлов по дате
обращайтесьsin2000 писал(а):Большое спасибо, работает отлично.
-
- Новоприбывший
- Сообщения: 13
- Зарегистрирован: 01 июл 2020, 11:43
- Репутация: 0
- Откуда: Брёхово
Re: Объединение данных из 2 файлов по дате
Здравствуйте!
У меня похожая задача, но в моем случае даты в двух таблицах могут не совпадать вовсе, а даты итоговой таблицы должны включать в себя все даты первой и второй таблиц.
Научите, пожалуйста, как из таблиц А1 и А2 получить таблицу А3:
У меня похожая задача, но в моем случае даты в двух таблицах могут не совпадать вовсе, а даты итоговой таблицы должны включать в себя все даты первой и второй таблиц.
Научите, пожалуйста, как из таблиц А1 и А2 получить таблицу А3:
- Вложения
-
- A1-A3.zip
- (645 байт) 252 скачивания
-
- Интересующийся
- Сообщения: 25
- Зарегистрирован: 07 фев 2012, 12:00
- Репутация: 20
Re: Объединение данных из 2 файлов по дате
Код: Выделить всё
A1 <- read.delim("A1.txt",sep="\t")
A2 <- read.delim("A2.txt",sep="\t")
A3 <- data.frame(t=sort(unique(c(A1$t,A2$t))),a1=NA,a2=NA)
A3$a1[match(A1$t,A3$t)] <- A1$a1
A3$a2[match(A2$t,A3$t)] <- A2$a2
A3
-
- Новоприбывший
- Сообщения: 13
- Зарегистрирован: 01 июл 2020, 11:43
- Репутация: 0
- Откуда: Брёхово
Re: Объединение данных из 2 файлов по дате
nplatonov, здравствуйте! Спасибо большое за элегантное решение - работает!
Даты у меня считались криво - немного дополнила код:
Даты у меня считались криво - немного дополнила код:
Код: Выделить всё
A1 <- read.delim("A1.txt",sep="\t")
A2 <- read.delim("A2.txt",sep="\t")
A1$t<-parse_date_time(as.character(A1$t),"dmy HMS") # пакет lubridate
A2$t<-parse_date_time(as.character(A2$t),"dmy HMS") # пакет lubridate
A3 <- data.frame(t=sort(unique(c(A1$t,A2$t))),a1=NA,a2=NA)
A3$a1[match(A1$t,A3$t)] <- A1$a1
A3$a2[match(A2$t,A3$t)] <- A2$a2
A3
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей