创建一个data.frame,仅包含特定列特有的观测值

创建一个data.frame,仅包含特定列特有的观测值,r,dataframe,dplyr,tidyverse,R,Dataframe,Dplyr,Tidyverse,如何创建data.frame,其中仅包含特定列的唯一观测值,其他列的值均大于0且=0 df <- data.frame(column=c("Obs1", "Obs2", "Obs3", "Obs4", "Obs5"), `1`=c(1,2,0,0,1), `2`=c(0,0,0,0,2), `3`=c(0,0,1,0,3), `4`=c(0,0,1,3,4),check.names=FALS

如何创建data.frame,其中仅包含特定列的唯一观测值,其他列的值均大于0且=0

df <- data.frame(column=c("Obs1", "Obs2", "Obs3", "Obs4", "Obs5"), `1`=c(1,2,0,0,1), `2`=c(0,0,0,0,2), `3`=c(0,0,1,0,3), `4`=c(0,0,1,3,4),check.names=FALSE)

df

  column 1 2 3 4
1 Obs1   1 0 0 0
2 Obs2   2 0 0 0
3 Obs3   0 0 1 1
4 Obs4   0 0 0 3
5 Obs5   1 2 3 4

S1_unique <- col1 > 0 and col2:4 = 0 #would include Observations 1 and 2

S34_unique <- col3 and 4 > 0 and col1,2 = 0 #would include Observation 3

如果我能很好地理解你的问题,这可能会告诉你你的想法:

df >正在附加包:“dplyr” >以下对象已从“package:stats”屏蔽: > >滤波器,滞后 >以下对象已从“package:base”屏蔽: > >相交、setdiff、setequal、并集 图书馆三年 df%>% pivot_longercols=`1`:`4`%>% 过滤值=0 %>% 选择-1%>% distinctname,值%>% 组\按名称%>% mutateid=行数%>% 解组%>% arrangename,id%>% pivot\u widerid\u cols=id%>% 选择id%>% replaceis.na.,0 >一个tibble:3x4 > `1` `2` `3` `4` > > 1 1 2 1 1 > 2 2 0 3 3 > 3 0 0 0 4
在2020年12月15日由v0.3.0首先创建,但是,我重命名了1、2、。。。对于col1,col2,…,因为这就是在伪代码中引用它们的方式

namesdf[2:5]% filtercol1>0,AcrosCol2:col4,~.==0 列col1 col2 col3 col4 1 Obs1 100 0 0 0 2 Obs2 0 0 0 0 df%>% 过滤器交叉Col3:col4,~.>0,acroscol1:col2,~.==0 列col1 col2 col3 col4 1 Obs3 0 1 1
您能澄清一下您的示例中的输出应该是什么样子吗?是的,就是这样,谢谢。名称更改不是必需的,但感谢提供了额外的信息:,这在不更改名称的情况下有效:df1%filter'1'>0,跨越'2':'4',~.==0此外,如果要筛选的列不是连续的,您仍然可以应用相同的代码编辑df4%FilterArossCol2,~.>0,AcrosCol4,~.>0,AcrosCol1,~.==0,AcrosCol3,~.==0这是低效的,但不是错误,也不是技术上的错误。你可以。。。它们,如filtercol1>0中所示,跨越Col2、col4、col3、~==您好@giocomai,谢谢您的回答,也许我应该更清楚确切的输出,因为我只说明了伪代码/想法。下面的答案就是我所需要的。但感谢您的回复: