這個問題對我來說有點難問,因為我在一個帶有空間資料的大型資料集中遇到它,這些資料是給我的,我不能在這里發布。在該資料中,其中一列包含空間物件的幾何形狀,這些空間物件的類不同,例如,有些是POLYGON,有些是LINE等。但是,這些屬性不是它們唯一具有的類,它們通常還具有sfg或sfc。所以它們是多類物件,同一列包含不同類的物件。
我想創建一些玩具最小示例,但我不知道該怎么做,因為我找不到將自定義類設定為資料框中行的方法。
因此,問題由兩部分組成。在第一部分中,我將發布用于創建示例玩具資料的代碼,這不起作用,但我認為它背后的邏輯將很容易掌握,我希望有人能夠更正我的代碼并創建示例資料。
在第二部分中,我將發布實際問題。
第一部分:
a <- 1:5
b <- 6:10
df <- data.frame(a, b)
class(df$b[1]) <- c("X", "Y")
class(df$b[2]) <- c("X", "Z")
class(df$b[3]) <- c("X", "Y", "Z")
class(df$b[4]) <- c("Z", "Y")
class(df$b[5]) <- c("Y")
這不起作用,因為如果我們呼叫例如class(df$b[1])它會給我們integer而不是c("X", "Y"). 但是讓我們想象一下它確實有效,因為這就是我的資料的樣子。
第二部分
我想過濾掉b擁有一類的情況Y。我試圖使用以下代碼:
df %>%
filter("Y" %in% class(b))
但它不起作用。在我的真實資料集中,我只得到一個空資料框。在我看來,class(b)inside offilter評估了整個b列的類而不是其單個成員,因此失敗了。但我不知道有什么方法可以改變它。
任何幫助,將不勝感激。
uj5u.com熱心網友回復:
您%in% class()應該可以作業,但inherits通常是推薦的方式,例如inherits(b, "Y"). 但由于只有串列可以包含不同類的專案,因此您需要應用inherits到每個串列元素。我會想df %>% filter(sapply(b, inherits, "Y"))。
這是我對可重現示例的嘗試:
df = data.frame(a = 1:3)
df[["b"]] = list(1, 2, 3)
class(df$b[[1]]) = "X"
class(df$b[[2]]) = c("X", "Y")
class(df$b[[3]]) = "Y"
df %>% filter(sapply(b, inherits, "Y"))
# a b
# 1 2 2
# 2 3 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/522291.html
標籤:r
