{R} 使用purr删除空白列或唯一列
我最近发现了purrr,我非常喜欢map函数。是否有人知道如何解决以下问题: 我有一个dataframe,我根据某个变量将其拆分为多个dataframe—拆分后,我希望删除结果列表中dataframes中唯一的列。在单个数据帧中解决这个问题相当容易,但在列表中我不太确定-您如何使用map解决这个问题 我目前的解决方案如下:{R} 使用purr删除空白列或唯一列,r,variables,dictionary,unique,purrr,R,Variables,Dictionary,Unique,Purrr,我最近发现了purrr,我非常喜欢map函数。是否有人知道如何解决以下问题: 我有一个dataframe,我根据某个变量将其拆分为多个dataframe—拆分后,我希望删除结果列表中dataframes中唯一的列。在单个数据帧中解决这个问题相当容易,但在列表中我不太确定-您如何使用map解决这个问题 我目前的解决方案如下: set.seed(123) dat <- data.frame(target = round(runif(9, min = 0, max = 1), 0),
set.seed(123)
dat <- data.frame(target = round(runif(9, min = 0, max = 1), 0),
split_var = c(rep("x", 3), rep("y", 3), rep("z", 3)),
var1 = c(rep("a", 3), rep("b", 2), "c", rep("d", 2), "e"),
var2 = paste("m", round(rnorm(9, mean = 5), 2), sep = "_"))
mod_dat <- dat %>% split(dat$split_var)
remover <- function(df){
non_unique_cols <- sapply(df, function(x) length(unique(x))) > 1
return(df[, non_unique_cols])
}
map(mod_dat, remover)
稍有不同的是,在这里,我们也会删除数据帧,而这些数据帧会删除目标变量——出于我的目的,没有必要保留这些数据帧。以下代码可用于快速确定保留哪些级别以及删除哪些级别
# In
unique(dat$split_var)[(unique(dat$split_var) %in% names(mod_dat))]
# Out
unique(dat$split_var)[!(unique(dat$split_var) %in% names(mod_dat))]
我们可以试试
library(dplyr)
library(purrr)
dat %>%
split(.$split_var) %>%
map(~Filter(function(x) n_distinct(x) >1 , .))
根据OP的数据集和更新后的问题,我们可以使用
setdiff
仅选择筛选所需的列,并使用bind_cols
,加入“目标”
dat %>%
split(.$split_var) %>%
map(~bind_cols(.["target"], Filter(function(x)
n_distinct(x) >1 , .[setdiff(names(.), "target")])))
#$x
# target var2
#1 0 m_4.89
#2 1 m_4.88
#3 0 m_5.18
#$y
# target var1 var2
#1 1 b m_6.28
#2 1 b m_3.27
#3 0 c m_6.69
#$z
# target var1 var2
#1 1 d m_5.5
#2 1 d m_7.53
#3 1 e m_5.55
数据
dat我们可以试试
library(dplyr)
library(purrr)
dat %>%
split(.$split_var) %>%
map(~Filter(function(x) n_distinct(x) >1 , .))
根据OP的数据集和更新后的问题,我们可以使用setdiff
仅选择筛选所需的列,并使用bind_cols
,加入“目标”
dat %>%
split(.$split_var) %>%
map(~bind_cols(.["target"], Filter(function(x)
n_distinct(x) >1 , .[setdiff(names(.), "target")])))
#$x
# target var2
#1 0 m_4.89
#2 1 m_4.88
#3 0 m_5.18
#$y
# target var1 var2
#1 1 b m_6.28
#2 1 b m_3.27
#3 0 c m_6.69
#$z
# target var1 var2
#1 1 d m_5.5
#2 1 d m_7.53
#3 1 e m_5.55
数据
dat@akrun我正在添加它away@akrun我马上就把它加上去了!那好多了!这正是我所拥有的。有一个小问题,我如何指定不将其应用于目标变量?@CharlFrancoisMarais目标变量是什么?我在我的原始帖子中添加了它-请看一看。它应该是1或0完美!你帮了大忙!谢谢!但问题得到了回答——剩下的很简单;)我需要删除目标是唯一的数据帧,因为没有模型可以建立在这些数据帧上…漂亮!那好多了!这正是我所拥有的。有一个小问题,我如何指定不将其应用于目标变量?@CharlFrancoisMarais目标变量是什么?我在我的原始帖子中添加了它-请看一看。它应该是1或0完美!你帮了大忙!谢谢!但问题得到了回答——剩下的很简单;)我需要删除目标唯一的数据帧,因为不能在这些数据帧上构建模型。。。