相當基本的問題讓我感到困惑。如何從包含空字串的 tibble 中洗掉行?
例如:
library(dplyr)
df <- data.frame(
data = c(
"1 1 2 2 3, 3 4 5 6 7",
"1 1 3 3, 2 3 4 5",
", ",
"1 1, 2 3"
),
num = c(2, 3, 1, 4)
)
dfTest <- df %>%
as_tibble() %>%
setNames(c("data", "num")) %>%
separate(data, c("col1", "col2"), ", ")
> dfTest
# A tibble: 4 × 3
col1 col2 num
<chr> <chr> <dbl>
1 "1 1 2 2 3" "3 4 5 6 7" 2
2 "1 1 3 3" "2 3 4 5" 3
3 "" "" 1
4 "1 1" "2 3" 4
看一下,dfTest我們可以看到第 3 行包含空字串。我正在尋找一種方法來從 tibble 中洗掉這些型別的行?
uj5u.com熱心網友回復:
一個tidyverse解決方案:
dfTest <- dfTest %>%
filter(. != "")
# A tibble: 3 x 3
col1 col2 num
<chr> <chr> <dbl>
1 1 1 2 2 3 3 4 5 6 7 2
2 1 1 3 3 2 3 4 5 3
3 1 1 2 3 4
uj5u.com熱心網友回復:
嘗試使用baseR,
dfTest[!dfTest$col1 == "", ]
col1 col2 num
<chr> <chr> <dbl>
1 1 1 2 2 3 3 4 5 6 7 2
2 1 1 3 3 2 3 4 5 3
3 1 1 2 3 4
uj5u.com熱心網友回復:
從您的問題來看,您是否希望僅在兩個字串都為空或其中一個為空時才洗掉該行還不是很清楚。
我更改了您的示例以指出差異,并詳細說明了一種方法,該方法允許選擇要檢查的列,并闡明您是否希望所有列或其中任何列為空以便洗掉它們。
library(dplyr)
library(tidyr)
df <- data.frame(
data = c(
"1 1 2 2 3, 3 4 5 6 7",
"1 1 3 3, ",
", ",
"1 1, 2 3"
),
num = c(2, 3, 1, 4)
)
dfTest <- df %>%
as_tibble() %>%
setNames(c("data", "num")) %>%
separate(data, c("col1", "col2"), ", ") %>%
rowwise() %>%
filter(!Reduce(f = `|`, x = c_across(col1:col2)=="")) %>%
ungroup()
dfTest
#> # A tibble: 2 × 3
#> col1 col2 num
#> <chr> <chr> <dbl>
#> 1 1 1 2 2 3 3 4 5 6 7 2
#> 2 1 1 2 3 4
由reprex 包(v2.0.1)于 2021 年 11 月 7 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/351652.html
上一篇:使用Google登錄-我們如何在.net中驗證GoogleID令牌服務器端?缺少代碼示例,庫似乎已棄用
下一篇:R-有條件的排列
