我有數百個資料幀的大串列,并試圖從包含 Z 列中模式 VALUE1 和 VALUE2 的兩個值之間過濾行。像這樣:
weight | height | Z
---------------------------
62 100 NA
65 89 NA
59 88 randomnumbersVALUE1randomtext
66 92 NA
64 90 NA
64 87 randomnumbersVALUE2randomtext
57 84 NA
68 99 NA
59 82 NA
60 87 srebmunmodnarVALUE1txetmodnar
61 86 NA
63 84 srebmunmodnarVALUE2txetmodnar
過濾后我會得到:
59 88 randomnumbersVALUE1randomtext
66 92 NA
64 90 NA
64 87 randomnumbersVALUE2randomtext
60 87 srebmunmodnarVALUE1txetmodnar
61 86 NA
63 84 srebmunmodnarVALUE2txetmodnar
我正在使用的代碼是:
lapply(df, function(x){
start <- which(grepl("VALUE1", x$Z))
end <- which(grepl("VALUE2", x$Z))
rows <- unlist(lapply(seq_along(start), function(y){start[y]:end[y]}))
return(df[rows,])})
但是每當我嘗試運行腳本時,都會收到一條錯誤訊息:
df[rows, ] 中的錯誤:維數不正確
為什么會發生這種情況,我該如何解決它..?
編輯:添加了實際資料表的最小樣本資料(串列的第一個資料框和第一個元素,VALUE2 將始終遵循 VALUE 1)
> head(tbl[[1]])
# A tibble: 6 × 4
t speed off Z
<dbl> <dbl> <dbl> <chr>
1 27.3 27.8 0.485 "{\"type\":\"M\",\"msg\":\"VALUE1\",\"time\":27.2498,\"dist\":0.410454}"
2 27.4 27.8 0.457 NA
3 27.5 27.8 0.430 NA
4 27.6 27.8 0.402 NA
5 27.7 27.8 0.374 NA
6 27.8 27.8 0.347 NA
uj5u.com熱心網友回復:
假設'VALUE1', 'VALUE2'的個數相等,分別用 得到'VALUE1', 'VALUE2' 的位置索引,通過遍歷 中的對應位置grep創建一個序列( ) ,并使用該序列對資料:Mapunlist
df1[sort(unique(unlist(Map(`:`, grep("VALUE1", df1$Z),
grep("VALUE2", df1$Z))))),]
-輸出
weight height Z
3 59 88 randomnumbersVALUE1randomtext
4 66 92 <NA>
5 64 90 <NA>
6 64 87 randomnumbersVALUE2randomtext
10 60 87 srebmunmodnarVALUE1txetmodnar
11 61 86 <NA>
12 63 84 srebmunmodnarVALUE2txetmodnar
如果df是單個 data.frame,當我們遍歷data.framewith時lapply,它將遍歷列,因此每個list元素都是一個向量。因此,沒有x$Z. 每個x將是相應的列
如果是list,則當有沒有“VALUE1”或“VALUE2”的情況或“VALUE1”匹配的數量不等于“VALUE2”時,可能會發生錯誤。在執行之前檢查這些元素可能會更好:
資料
df1 <- structure(list(weight = c(62L, 65L, 59L, 66L, 64L, 64L, 57L,
68L, 59L, 60L, 61L, 63L), height = c(100L, 89L, 88L, 92L, 90L,
87L, 84L, 99L, 82L, 87L, 86L, 84L), Z = c(NA, NA,
"randomnumbersVALUE1randomtext",
NA, NA, "randomnumbersVALUE2randomtext", NA, NA, NA,
"srebmunmodnarVALUE1txetmodnar",
NA, "srebmunmodnarVALUE2txetmodnar")),
class = "data.frame", row.names = c(NA,
-12L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/452142.html
上一篇:不使用append()反轉串列
