如何通过减去不同的单元格后跟每行的特定字符串来创建新列

时间:2015-06-01 23:08:19

标签: r

所以我有一个看起来像这样的数据结构

       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

所以发生的事情是我有一张非常凌乱的桌子。所以你可以看到,第一列代表第三列的时间,黄色,第四列代表第6列的时间。我试图做的是我尝试在制动和黄色之间做时差,然后创建一个新列。正如你可以看到一些行没有刹车。我只是想知道如何从中创建一个新列。

第二个问题是我试图创建两个新的崩溃列而没有制动,这意味着如果该行有"崩溃"或者没有"刹车",它会是1,所以我猜我想做一个真假的东西并用1和0表示它所以我可以把它们加起来算一算。我在想做一个for循环,但我有点卡住了。我真的很感激任何帮助

1 个答案:

答案 0 :(得分:0)

因为你的数据框有"刹车"和"崩溃"在V9或V​​12中,我要做的第一件事就是创建一个包含这些事件发生时间的列,否则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))

现在你可以很容易地添加你想要的列(&#34;制动和黄色时间之间的差异&#34;或者#34;崩溃和没有刹车&#34;):

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