2014-01-31 3 views
1

У меня есть кадр данных, который 24 столбцов и второй и третий вид колонки, какзамещающие значения из двух столбцов в R

1 2230 
1 2300 
1 2330 
1 2400 
2 30 
2 100 

Это только часть колонн. Вторая колонка имеет 48 единиц, затем 48 двойных, а затем 48 три и т. Д. Вплоть до 365. Столбец три - это время в полчаса и начинается с 30, затем 100, затем 130, затем 200 и так далее, вплоть до 2400. С шаблонами каждый столбец I заканчивается приведенным выше примером, где последний соответствует 2400. Мне нужно идти через каждый столбец и заменять 2400 на 0 и это последнее значение, связанное с 2400, на значение плюс один, поэтому я заканчиваю

1 2230 
1 2300 
1 2330 
2 0 
2 30 
2 100 

Я могу легко заменить значения для одного столбца, но я не знаю, как это сделать для двух столбцов, где один столбец зависит от другого. Я попытался использовать цикл for и if, но не помог бы ему работать.

ответ

2

Это должно быть довольно просто - если ваш data.frame (df) имеет столбцы day и time:

df[df$time==2400,]$day <- df[df$time==2400,]$day + 1 

df[df$time==2400,]$time <- 0 

Если вы готовы научиться использовать data.table пакет, это гораздо проще:

df[time==2400, c("day", "time"):= list(day + 1, 0)] 
+0

Это сделало это. Спасибо за помощь! Я не знал о пакете data.table. Спасибо что подметил это – user2113499

0

единое решение линия:

df[df[3] == 2400, 2:3] <- cbind(df[df[3] == 2400, 2] + 1, 0) 

Здесь мы просто определить те строки, которые имеют 2400 в качестве 3-го значения Col, а затем заменить 2-й и 3-й столбец со 2-й колонке + 1, и ноль.

0

Существует несколько способов сделать это, но очень простой, векторный подход заключается в использовании массива обнаружения для поиска ваших значений «2400» в третьем столбце.

detection_array <- data[,3]==2400 
data[detection_array,2] <- data[detection_array,2] + 1 
data[detection_array,3] <- 0 

Шаг 1: Создание массива true/false значений, которые определяют значения '2400' в третьей колонке.

detection_array <- data[,3]==2400 

Шаг 2: Добавить '1' для соответствующих значений во втором столбце.

data[detection_array,2] <- data[detection_array,2] + 1 

Шаг 3: Изменение значения, определенные в третьем столбце в '0'.

data[detection_array,3] <- 0 
Смежные вопросы