從這樣的資料框開始:
col1 <- c("Anne", "Emma", "Katy", "Albert", "Richard")
col2 <- c("Albert", "Mark", "Mike", "Loren", "Anne")
col3 <- c("Mark", "Emma", "Paul", "George", "Samuel" )
df <- cbind(col1, col2, col3)
我只想保留此向量中報告的值:
selected <- c("Emma", "Katy", "Mark")
并洗掉所有其他人,以獲得這樣的新資料框:
col1 col2 col3
NA NA "Mark"
"Emma" "Mark" "Emma"
"Katy" NA NA
NA NA NA
NA NA NA
我已經嘗試使用以下代碼并且它有效:
df[df != "Emma" & df != "Katy" & df != "Mark"] <- NA
但我想找到一種selected在 if 陳述句中使用向量的方法,而不是手動撰寫所有條件。實際上,我的實際資料框和值向量比本示例中的要大。
在此先感謝您的幫助!
uj5u.com熱心網友回復:
問題中的代碼創建了一個矩陣cbind,而不是 data.frame。這很重要,因為 df 是具有相同長度且具有暗淡屬性集的向量串列,而矩陣是折疊向量,具有暗淡屬性集的向量。
- 對于 data.frames,在其列上使用回圈,將函式
'%in%'應用于每個列; - 對于矩陣,不需要回圈。
col1 <- c("Anne", "Emma", "Katy", "Albert", "Richard")
col2 <- c("Albert", "Mark", "Mike", "Loren", "Anne")
col3 <- c("Mark", "Emma", "Paul", "George", "Samuel" )
mat <- cbind(col1, col2, col3)
df <- data.frame(col1, col2, col3)
selected <- c("Emma", "Katy", "Mark")
is.na(df) <- !sapply(df, `%in%`, selected)
df
#> col1 col2 col3
#> 1 <NA> <NA> Mark
#> 2 Emma Mark Emma
#> 3 Katy <NA> <NA>
#> 4 <NA> <NA> <NA>
#> 5 <NA> <NA> <NA>
is.na(mat) <- !mat %in% selected
mat
#> col1 col2 col3
#> [1,] NA NA "Mark"
#> [2,] "Emma" "Mark" "Emma"
#> [3,] "Katy" NA NA
#> [4,] NA NA NA
#> [5,] NA NA NA
由reprex 包于 2022-03-20 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/449340.html
上一篇:元素型別“Set<Widget?>”不能分配給串列型別“Widget”
下一篇:比較兩個不同維度的資料框
