2015-06-01 4 views
0

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

 V4 V5  V6  V7 V8 V9 V10 V11 V12 id   date start yellow 
3 10552 180 yellow  NA NA   NA NA  101 20130826T155649  3 10552 
4 19502 150 yellow  NA NA   NA NA  101 20130826T155649 12002 19502 
5 28957 130 yellow 30457 160 brake 31457 170 red 101 20130826T155649 22452 28957 
6 46662 160 yellow 47912 185 red  NA NA  101 20130826T155649 38657 46662 
7 55612 130 yellow 58362 185 red  NA NA  101 20130826T155649 49112 55612 
8 66567 140 yellow 69167 192 red 69267 194 crash 101 20130826T155649 59562 66567 
9 86532 130 yellow 88182 163 brake 89532 173 red 101 20130826T155649 80027 86532 
10 101337 130 yellow 103087 165 red 103187 167 brake 101 20130826T155649 93282 101337 

Так что произошло, у меня есть очень грязный стол. Итак, вы можете видеть, первый столбец представляет время для третьего столбца, желтый, а четвертый столбец представляет время для шестого столбца. То, что я пытаюсь сделать, это то, что я пытаюсь сделать разницу во времени между тормозом и желтым, а затем создать новую колонку. И, как вы видите, некоторые ряды не имеют тормоза. Мне просто интересно, как создать новый столбец из этого.

Второй вопрос: я пытаюсь создать два новых столбца для сбоя и без тормозов, то есть, если строка имеет «сбой» или не имеет «тормоза», это будет 1, поэтому я предполагаю, что я хотите сделать истинную ложную вещь и представить ее с 1 и 0, чтобы я мог добавить их и подсчитать. Я думал, что я делаю цикл, но я застрял. Я бы очень признателен за любую помощь.

+2

не могли бы вы попробовать используйте 'dput (...)' в своих данных и скопируйте то, что вы получаете в свой вопрос? Это облегчит людям помощь вам. Также попробуйте правильно отформатировать данные в качестве кода. –

ответ

0

Поскольку ваш фрейм данных имеет «тормоз» и «сбой» в V9 или V12, первое, что я хотел бы сделать, это создать столбец, содержащий время этих событий, если они произойдут , а в противном случае NA:

dat$brake <- ifelse(dat$V9 == "brake", dat$V7, ifelse(dat$V12 == "brake", dat$V10, NA)) 
dat$crash <- ifelse(dat$V9 == "crash", dat$V7, ifelse(dat$V12 == "crash", dat$V10, NA)) 

Теперь вы можете очень легко добавить столбцы, которые вы хотите («разница между тормозом и желтого времени» или «аварии и без тормозов»):

dat$yb <- dat$brake - dat$yellow 
dat$cnb <- as.numeric(!is.na(dat$crash) & is.na(dat$brake)) 
#  V4 V5  V6  V7 V8 V9 V10 V11 V12 id   date start yellow brake crash yb cnb 
# 1 10552 180 yellow  NA NA <NA>  NA NA <NA> 101 20130826T155649  3 10552  NA NA NA 0 
# 2 19502 150 yellow  NA NA <NA>  NA NA <NA> 101 20130826T155649 12002 19502  NA NA NA 0 
# 3 28957 130 yellow 30457 160 brake 31457 170 red 101 20130826T155649 22452 28957 30457 NA 1500 0 
# 4 46662 160 yellow 47912 185 red  NA NA <NA> 101 20130826T155649 38657 46662  NA NA NA 0 
# 5 55612 130 yellow 58362 185 red  NA NA <NA> 101 20130826T155649 49112 55612  NA NA NA 0 
# 6 66567 140 yellow 69167 192 red 69267 194 crash 101 20130826T155649 59562 66567  NA 69267 NA 1 
# 7 86532 130 yellow 88182 163 brake 89532 173 red 101 20130826T155649 80027 86532 88182 NA 1650 0 
# 8 101337 130 yellow 103087 165 red 103187 167 brake 101 20130826T155649 93282 101337 103187 NA 1850 0 
+0

удивительный. поэтому мои данные более разрушены, чем я думал. поэтому файлы имеют 15 или даже 18 столбцов. так что я просто пишу этот код: dat $ тормоз <- ifelse (dat $ V9 == "тормоз", что $ V7, ifelse (dat $ V12 == "тормоз", то $ V10, ifelse (dat $ V15 = = «тормоз», b $ V13, NA)) –

Смежные вопросы