我有一個資料框(df),其中有一列型別字串,例如
code country
DK Denmark
DE Germany
BEB Belgium
B Brazil
而且我不會撰寫一個 for 回圈來列印以 B 開頭的國家/地區。這就是我處理它的方式,但我得到了一個錯誤:
for (i in unique(df$country)) {
if (i == grep("^B", unique(df$country), value = TRUE)) {
print(i)
}
}
錯誤:
Error in if (i == grep("^B", unique(df$country), value = TRUE)) { :
the condition has length > 1
uj5u.com熱心網友回復:
我們不需要一個回圈,因為grep它是矢量化的
unique(subset(df, grepl("^B", country), select = country))
-輸出
country
3 Belgium
4 Brazil
關于回圈中的問題,它只是進行==元素比較并回傳具有第二個向量長度的邏輯向量,因為第一個向量的長度僅為 1。
'Belgium' == grep("^B", unique(df$country), value = TRUE)
[1] TRUE FALSE
這會觸發長度警告,因為if/else期望長度為 1 的向量作為輸入
如果我們使用%in%,它會回傳一個 TRUE/FALSE
for (i in unique(df$country)) {
if (i %in% grep("^B", unique(df$country), value = TRUE)) {
print(i)
}
}
-輸出
[1] "Belgium"
[1] "Brazil"
資料
df <- structure(list(code = c("DK", "DE", "BEB", "B"), country = c("Denmark",
"Germany", "Belgium", "Brazil")), class = "data.frame",
row.names = c(NA,
-4L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/525176.html
標籤:r循环
