我想弄清楚一副套牌中有多少張牌是花色黑桃或偶數,但我不明白為什麼根據我編寫最後一段代碼的方式會得到不同的答案。我想得到的答案是 31。
Suits <- c("Diamonds", "Clubs", "Hearts", "Spades")
Value <- 1:13
Deck <- expand.grid(Value = Value, Suits = Suits)
Deck$Cards <- paste(Deck$Suits, Deck$Value)
Hearts <- subset(Deck, Suits == "Hearts", "Cards")
Nines <- subset(Deck, Value == 9, "Cards")
Spades <- subset(Deck, Suits == "Spades", "Cards")
Even_Value <- subset(Deck, Value %% 2 == 0, "Cards")
length(union(Spades, Even_Value))
Spades <- Deck[Deck$Suits == "Spades", "Cards"]
Even_Value <- Deck[Deck$Value %% 2 == 0, "Cards"]
length(union(Spades, Even_Value))
該subset
函數返回一個具有單列的數據框,而表達式Deck[Deck$Suits == "Spades", "Cards"]
返回一個向量。這些不是一回事。特別是,當您嘗試執行union
兩個數據幀中的一個時,您將不會得到一個向量,而是一個列表,每個數據幀中的每一列都有一個條目。
Spades <- subset(Deck, Suits == "Spades", "Cards")
Even_Value <- subset(Deck, Value %% 2 == 0, "Cards")
union(Spades, Even_Value)
#> [[1]]
#> [1] "Spades 1" "Spades 2" "Spades 3" "Spades 4" "Spades 5" "Spades 6" "Spades 7"
#> [8] "Spades 8" "Spades 9" "Spades 10" "Spades 11" "Spades 12" "Spades 13"
#>
#> [[2]]
#> [1] "Diamonds 2" "Diamonds 4" "Diamonds 6" "Diamonds 8" "Diamonds 10" "Diamonds 12"
#> [7] "Clubs 2" "Clubs 4" "Clubs 6" "Clubs 8" "Clubs 10" "Clubs 12"
#> [13] "Hearts 2" "Hearts 4" "Hearts 6" "Hearts 8" "Hearts 10" "Hearts 12"
#> [19] "Spades 2" "Spades 4" "Spades 6" "Spades 8" "Spades 10" "Spades 12"
由於您傳遞了兩個數據幀,每個數據幀都有一列,因此結果列表中有 2 * 1 = 2 個向量,因此它是一個長度為 2 的列表。
同樣,如果你做了一個union
內置數據集iris
and mtcars
,你會得到一個包含 16 個向量的列表(來自 的所有 5 列iris
和來自 的所有 11 列mtcars
):
ncol(mtcars)
#> [1] 11
ncol(iris)
#> [1] 5
length(union(mtcars, iris))
#> [1] 16
但是,第二個版本執行兩個向量的並集而不是兩個數據幀,並且union
這兩個向量的 將是正確的:
Spades <- Deck[Deck$Suits == "Spades", "Cards"]
Even_Value <- Deck[Deck$Value %% 2 == 0, "Cards"]
union(Spades, Even_Value)
#> [1] "Spades 1" "Spades 2" "Spades 3" "Spades 4" "Spades 5" "Spades 6"
#> [7] "Spades 7" "Spades 8" "Spades 9" "Spades 10" "Spades 11" "Spades 12"
#> [13] "Spades 13" "Diamonds 2" "Diamonds 4" "Diamonds 6" "Diamonds 8" "Diamonds 10"
#> [19] "Diamonds 12" "Clubs 2" "Clubs 4" "Clubs 6" "Clubs 8" "Clubs 10"
#> [25] "Clubs 12" "Hearts 2" "Hearts 4" "Hearts 6" "Hearts 8" "Hearts 10"
#> [31] "Hearts 12"
為了讓第一個版本的工作,你必須從中選擇您想使工會(每種情況下的數據幀的列,它是唯一的列- Cards
,但仍需要進行選擇,以獲得向量中的數據框架而不是數據框架本身)
Spades <- subset(Deck, Suits == "Spades", "Cards")
Even_Value <- subset(Deck, Value %% 2 == 0, "Cards")
length(union(Spades$Cards, Even_Value$Cards))
#> [1] 31
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句