以下是我的樣本數據集:當只有一行滿足R中的條件時,如何刪除屬於特定組的所有行?
> dput(lanec)
structure(list(vehicle.id = c(2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L,
5L, 5L), frame.id = c(1L, 2L, 3L, 4L, 5L, 3L, 4L, 5L, 6L, 7L,
8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 6L, 7L, 8L, 9L, 10L, 11L,
12L), lane.change = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L,
2L, 1L), .Label = c(".", "yes"), class = "factor")), .Names = c("vehicle.id",
"frame.id", "lane.change"), class = "data.frame", row.names = c(NA,
-26L))
的第一列是進入高速公路上的一個特定部分車輛的ID。觀察它們直到它們離開該段,因此每輛車具有不同的觀察時間段。幀號在frame.id
列中給出。第三欄告訴車輛是否改變車道和車架。 在此示例數據中,除#2號車輛之外的所有車道都改變了車道。車輛#5改變了車道兩次。
要求
我要確定哪些車輛改變車道,並從數據集刪除。我嘗試使用subset(lanec, lane.change!='yes')
,但它只刪除lane.change
的值爲yes
的那些行。使用樣本數據集,期望的輸出應該是:
vehicle.id frame.id lane.change
1 2 1 .
2 2 2 .
3 2 3 .
4 2 4 .
5 2 5 .
我怎樣才能做到這一點?它一定很簡單,但我無法弄清楚。提前致謝。
或'lanec [有lanec,ave(lane.change!=「yes」,vehicle.id,FUN = all))]''避免使用'subset' – thelatemail
這是一個味道問題,我更喜歡使用'子集'以避免必須兩次寫入'lanec'。我使用的功能也比你少一些,它的可讀性更高,可以爭辯。 – flodel
@ flodel謝謝。有用。但是,你能否解釋一下在後臺發生了什麼?我在幫助中查看了'ave',發現它通過分組變量找到了平均值。有兩件事讓我很困惑:1)我看到你用'FUN'中的'all'替換了'mean',這是什麼意思? 2)'lane.change'是一個因子變量,但是'ave'找到了平均值,它是如何工作的因素? –