Условное обновление данных - PullRequest
1 голос
/ 05 апреля 2011

Ребята, у меня есть почасовые данные о температуре, подобные этим

Lines <- "Date,Outdoor,Indoor
 01/01  01:00:00,24.5,21.3
 01/01  02:00:00,24.3,21.1
 01/01  03:00:00,24.1,21.1
 01/01  04:00:00,24.1,20.9
 01/01  05:00:00,25.,21.
 01/01  06:00:00,26.,21.
 01/01  07:00:00,26.6,22.3
 01/01  08:00:00,28.,24.
 01/01  09:00:00,28.9,26.5
 01/01  10:00:00,29.4,29
 01/01  11:00:00,30.,32.
 01/01  12:00:00,33.,35.
 01/01  13:00:00,33.4,36
 01/01  14:00:00,35.8,38
 01/01  15:00:00,32.3,37
 01/01  16:00:00,30.,34.
 01/01  17:00:00,29.,33.
 01/01  18:00:00,28.,32.
 01/01  19:00:00,26.3,30
 01/01  20:00:00,26.,28.
 01/01  21:00:00,25.9,25
 01/01  22:00:00,25.8,21.3
 01/01  23:00:00,25.6,21.4
 01/01  24:00:00,25.5,21.5
 01/02  01:00:00,25.4,21.6
 01/02  02:00:00,25.3,21.8"

И мне нужно создать еще один столбец, в котором будет указано 1, если температура в помещении выше, чем на улице, как минимум на 1 градус.

Я пробовал:

DF$Time = 0
if ((Indoor-Outdoor) >= 1) DF$Time = 1

Но вышеописанное не работает.Любое предложение?

Ответы [ 2 ]

5 голосов
/ 05 апреля 2011

Вы также можете уменьшить логику до логического значения следующим образом:

#using mdsummer's DF object:
y <- with(DF, (Indoor - Outdoor >= 1) * 1)

x <- ifelse(test = (DF$Indoor - DF$Outdoor) >= 1, yes = 1, no = 0)

> all.equal(x,y)
[1] TRUE
1 голос
/ 05 апреля 2011

Используйте ifelse для векторизованного сравнения, а не if, который предназначен для одноэлементных сравнений.

Кроме того, сначала вы должны дать воспроизводимый код, но 'Lines' - это просто символьный вектор, поэтому

DF <- read.table(textConnection(Lines), sep = ",", header = TRUE)

Time может быть добавлено непосредственно как возвращаемое значение ifelse, которое дает 1 для случая, когда сравнение истинно, и 0 в противном случае.

DF$Time <- ifelse(test = (DF$Indoor - DF$Outdoor) >= 1, yes = 1, no = 0)

Подробнее о if, требующем одного элемента, см. В справке (Control):

cond: логический вектор длины один, который не является «NA». Условия длины больше единицы принимаются с предупреждением, но только первый элемент используется. Другие типы принуждаются к логично, если возможно, игнорируя любой класс.

...