Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据行功能(dplyr)筛选行_R_Dplyr - Fatal编程技术网

根据行功能(dplyr)筛选行

根据行功能(dplyr)筛选行,r,dplyr,R,Dplyr,请您帮助我使用dplyr而不是apply执行下面最后一个命令中的过滤,好吗 我正试图解决这个问题 库(gtools) n您可以使用行操作执行行操作。然后使用mutate确定是否满足条件,并使用filter根据条件进行筛选 res <- dt %>% data.frame %>% # convert to data.frame, so you can use dplyr rowwise %>% # for rowwise calculations mut

请您帮助我使用
dplyr
而不是
apply
执行下面最后一个命令中的过滤,好吗

我正试图解决这个问题

库(gtools)

n您可以使用
行操作
执行行操作。然后使用
mutate
确定是否满足条件,并使用
filter
根据条件进行筛选

res <- dt %>% 
  data.frame %>% # convert to data.frame, so you can use dplyr
  rowwise %>%    # for rowwise calculations
  mutate(cond = {y = rep(1:6, c(X1, X2, X3, X4, X5, X6)) # calculate condition
                 mean(y)==3 & diff(range(y))==4 & median(y)==3.5 & SmplMode(y)==4}) %>%
  filter(cond) %>%          # filter by condition
  mutate(cond = NULL) %>%   # remove condition
  as.matrix      # convert back to matrix
res%
data.frame%>%#转换为data.frame,因此可以使用dplyr
行%>%#用于行计算
变异(cond={y=rep(1:6,c(X1,X2,X3,X4,X5,X6))#计算条件
平均值(y)==3和差异(范围(y))==4和中值(y)==3.5和SmplMode(y)==4})%>%
过滤(条件)%>%#按条件过滤
变异(cond=NULL)%>%#删除条件
as.matrix#转换回矩阵

使用
rowwise
的操作很慢,因此在
matrixStats
包的行操作的帮助下,很早就过滤掉
SmplMode(y)、mean(y)、diff(range(y))
条件,可以很好地加快速度。以下内容在我的笔记本电脑上运行约0.4秒,而您的原始解决方案和@shadow的解决方案都运行约70秒

library(dplyr)
library(matrixStats)

df <- data.frame(dt)

df$m <- rowMaxs(dt)                                       #for SmplMode(y)  
S <- matrix(1:6, ncol=ncol(dt), nrow=nrow(dt), byrow=T)
Z <- S*(dt!=0)
Z[Z==0] <- NA
df$Range <- rowMaxs(Z, na.rm=TRUE)-rowMins(Z, na.rm=TRUE) #for diff(rang(y))
df$Mean <- rowSums(S*dt)/rowSums(dt)                      #for mean(y)

res <- df %>% 
  filter(X4  == m, (X1==m)+(X2==m)+(X3==m)+(X4==m)+(X5==m)+(X6==m)==1, 
         Range == 4, # range condition here
         Mean == 3) %>% #mean condition here
  rowwise() %>% 
  mutate(Med = median(rep(c(1,2,3,4,5,6), c(X1, X2, X3, X4, X5, X6)))) %>%
  filter(Med == 3.5) %>%   #median condition here 
  select(-m, -Range, -Mean, -Med) %>% # get rid of newcols
  as.matrix 
库(dplyr)
图书馆(matrixStats)
df
library(dplyr)
library(matrixStats)

df <- data.frame(dt)

df$m <- rowMaxs(dt)                                       #for SmplMode(y)  
S <- matrix(1:6, ncol=ncol(dt), nrow=nrow(dt), byrow=T)
Z <- S*(dt!=0)
Z[Z==0] <- NA
df$Range <- rowMaxs(Z, na.rm=TRUE)-rowMins(Z, na.rm=TRUE) #for diff(rang(y))
df$Mean <- rowSums(S*dt)/rowSums(dt)                      #for mean(y)

res <- df %>% 
  filter(X4  == m, (X1==m)+(X2==m)+(X3==m)+(X4==m)+(X5==m)+(X6==m)==1, 
         Range == 4, # range condition here
         Mean == 3) %>% #mean condition here
  rowwise() %>% 
  mutate(Med = median(rep(c(1,2,3,4,5,6), c(X1, X2, X3, X4, X5, X6)))) %>%
  filter(Med == 3.5) %>%   #median condition here 
  select(-m, -Range, -Mean, -Med) %>% # get rid of newcols
  as.matrix