我有一個資料框如下:
df <- data.frame(v1 = 1:5, v2 = c('A, A, A', 'A', 'S', 'A, S', 'P, P, A'))
在列中v2,有三個字母(A、P、S),它們可以以任意組合出現,例如"A, A", "A, P", "P, P, S", "A", "A, A, S, A",等。
我想要做的是檢測只包含字母“A”的行,無論它重復多少次。在我的示例 df 中,所需的 anseer 是 : TRUE, TRUE, FALSE, FALSE, FALSE。
提前致謝。
uj5u.com熱心網友回復:
我會使用正則運算式模式^A(?:,\s*A)*$:
df[grepl('^A(?:,\\s*A)*$', df$v2), ]
v1 v2
1 1 A, A, A
2 2 A
資料:
df <- data.frame(v1 = 1:5, v2 = c('A, A, A', 'A', 'S', 'A, S', 'P, P, A'))
uj5u.com熱心網友回復:
您可以將值拆分為串列中的向量,然后檢查該向量中的所有值是否都等于 A。您可以使用這一行
sapply(strsplit(df$v2, ", "), function(x) all(x=="A"))
# [1] TRUE TRUE FALSE FALSE FALSE
uj5u.com熱心網友回復:
使用正則運算式你可以做 -
grepl('^(A,?\\s?) $', df$v2)
[1] TRUE TRUE FALSE FALSE FALSE
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340033.html
下一篇:dplyr變異公式參考前幾行
