簡體   English   中英

在 %>% 內使用應用函數

[英]Use apply functions within %>%

下面我創建了一個函數,如果其中只有一個唯一值,則刪除特定列。 我可以以某種方式在 %>% 內使用 lapply 以避免調用該函數三次嗎? 或者甚至調用所有列的函數?

df <- tibble(col1 = sample(1:6), col2 = sample(1:6), col3 = 3, col4 = 4)

condDelCol <- function(mycolumn, mydataframe) {    
    if(length(unique(mydataframe[[mycolumn]])) == 1) { mydataframe[[mycolumn]] = NULL }
    mydataframe
}

df %>% 
condDelCol("col2", .) %>% 
condDelCol("col3", .) %>% 
condDelCol("col4", .)

使用dplyr ,一個選項是select_if

library(dplyr) 
df %>%
   select_if(~ n_distinct(.) > 1)
# A tibble: 6 x 2
#   col1  col2
#  <int> <int>
#1     1     6
#2     6     1
#3     5     5
#4     3     4
#5     4     2
#6     2     3

或者另一種方式是base R通過遍歷與列sapply ,創建一個邏輯vector ,提取僅具有單一的列名unique值,並分配( <-NULL

i1 <-  sapply(df, function(x) length(unique(x)))
df[names(which(i1 == 1))] <- NULL

或帶Filter

Filter(var, df)

你也可以用這個。 它忽略標准差為 0 的列。

df[, sapply(df, sd) != 0]

# A tibble: 6 x 2
   col1  col2
  <int> <int>
1     1     3
2     5     6
3     6     1
4     2     2
5     3     4
6     4     5

或者如果你想使用管道操作符

df %>%
  select(which(sapply(df, sd) != 0))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM