根据样本(行)中的存在情况选择列R

根据样本(行)中的存在情况选择列R,r,tidyverse,case-when,R,Tidyverse,Case When,我有很多不同变量的计数数据的代码,比如:(下面是简化的-原始数据集有>100列) 我只想保留至少有3个计数的列(变量在示例中出现3次)。。。我试着用 data%>%修饰总计(“行”) 但这导致第一列未包括在内: x y z a b c 1 0 1 1 0 0 0 0 1 0 0 1 1 0 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 1 1 1 0 1 0 1 total 2 4 3 2 5 如果可能的话,我想用

我有很多不同变量的计数数据的代码,比如:(下面是简化的-原始数据集有>100列)

我只想保留至少有3个计数的列(变量在示例中出现3次)。。。我试着用
data%>%修饰总计(“行”)
但这导致第一列未包括在内:

x     y z a b c 

1     0 1 1 0 0
0     0 1 0 0 1
1     0 1 0 1 1 
0     1 0 1 0 1 
1     0 1 0 1 1 
1     1 0 1 0 1
total 2 4 3 2 5
如果可能的话,我想用tidyverse?是否有一种方法可以使用filter()和case_when()按行中的状态筛选数据


谢谢

我认为这将帮助您获得所需的输出:

library(dplyr)
library(tidyr)

df %>%
  mutate(id = row_number()) %>%
  pivot_longer(-id, names_to = "variable", values_to = "value") %>%
  group_by(variable) %>%
  add_count(variable, wt = value) %>%
  filter(n >= 3) %>%
  select(- n) %>%
  pivot_wider(names_from = variable, values_from = value)

# A tibble: 6 x 5
     id     x     z     a     c
  <int> <dbl> <dbl> <dbl> <dbl>
1     1     1     1     1     0
2     2     0     1     0     1
3     3     1     1     0     1
4     4     0     0     1     1
5     5     1     1     0     1
6     6     1     0     1     1

库(dplyr)
图书馆(tidyr)
df%>%
变异(id=行号())%>%
pivot_longer(-id,names_to=“variable”,values_to=“value”)%>%
分组依据(变量)%>%
添加计数(变量,wt=值)%>%
过滤器(n>=3)%>%
选择(-n)%>%
透视图(名称从=变量,值从=值)
#一个tibble:6x5
id x z a c
1     1     1     1     1     0
2     2     0     1     0     1
3     3     1     1     0     1
4     4     0     0     1     1
5     5     1     1     0     1
6     6     1     0     1     1

虽然已经提出了最短的答案,但这个简短的tidyverse语法也可以

df %>% select(where(~ sum(.) >= 3))

  x z a c
1 1 1 1 0
2 0 1 0 1
3 1 1 0 1
4 0 0 1 1
5 1 1 0 1
6 1 0 1 1
重复记录的baseR语法

df[, colSums(df) >=3]
  x z a c
1 1 1 1 0
2 0 1 0 1
3 1 1 0 1
4 0 0 1 1
5 1 1 0 1
6 1 0 1 1

欢迎来到堆栈溢出。如果将数据作为对象包含,则更容易帮助您:使用
dput(head(your_data_sample,n))
其中
n
是足以证明问题的数据
df[,colSums(df)>=3]
应该可以。亲爱的AnilGoyal,这是一个很好的答案,简洁明了,切中要害。
df[, colSums(df) >=3]
  x z a c
1 1 1 1 0
2 0 1 0 1
3 1 1 0 1
4 0 0 1 1
5 1 1 0 1
6 1 0 1 1