【发布时间】:2021-09-25 06:45:45
【问题描述】:
我正在编写一个闪亮的应用程序,但我无法解决这个问题,我希望你能提供帮助。
假设用户输入了一些因素和一些数据:
data<-read.table(text="Var1 Var2 Var3 Var4 Data
1 1 1 1 25
1 1 1 1 15
1 1 1 2 10
1 1 1 2 11
1 1 2 1 30
1 1 2 1 32
1 1 2 2 120
1 1 2 2 123
1 2 1 1 50
1 2 1 1 52
1 2 1 2 100
1 2 1 2 101
1 2 2 1 150
1 2 2 1 152
1 2 2 2 160
1 2 2 2 162
2 1 1 1 5
2 1 1 1 4
2 1 1 2 60
2 1 1 2 62
2 1 2 1 40
2 1 2 1 42
2 1 2 2 130
2 1 2 2 132
2 2 1 1 70
2 2 1 1 72
2 2 1 2 80
2 2 1 2 82
2 2 2 1 90
2 2 2 1 92
2 2 2 2 110
2 2 2 2 111",
header=T)
这些数据可以是任何东西,任何长度或数量的变量,其中一些可能是因子。
如果我想要 Var1=1 和 Var2=2,我知道如何对数据进行子集分析:
data[,5][which(data[,1]==1 & data[,2]==2)]
或过滤器
filter(data,data[,1]==1 & data[,2]==2)[,5]
现在假设我想将其更改为 Var1=1、Var2=2、和 Var3=2 的数据。如果我在脚本中执行此操作,我可以在过滤器或子集中键入另一个标准。但是我将如何在应用程序中设置它以能够过滤或子集任意数量的因素? (理想情况下,使用 base 或 dplyr。)在应用程序中,我可以传递因子和数据的列号,我只是不知道如何设置它来做到这一点,无论用户选择了多少列作为因素。
谢谢!
编辑....
回答!
@akrun 在下面的出色答案,适用于像我这样的人! :
factors=c(1,2,3,4)
levels_selected=c(1,1,2,1)
data[rowSums(levels_selected[col(data[factors])]==data[factors])==length(levels_selected),]
【问题讨论】:
标签: r