如何根据条件分离R中的数据

如何根据条件分离R中的数据,r,analysis,organization,R,Analysis,Organization,我想根据R中的某些条件分离数据进行数据分析,但我不知道如何进行 我有已经分组在一起的数据,我想根据分组的某些条件将它们分开。下面是我正在尝试做的一个例子: 原始数据: 数据集: 所需数据: dataset1: trial position data 1 1 70 1 2 73 1 3 80 1 4 75 4 1 80 4 2 90 4 3 85 4 4 53 dataset2: trial position data 2 1 41 2 2 80 2 3 45 2 4 70 3 1 50 3

我想根据R中的某些条件分离数据进行数据分析,但我不知道如何进行

我有已经分组在一起的数据,我想根据分组的某些条件将它们分开。下面是我正在尝试做的一个例子:

原始数据:
数据集:

所需数据:

dataset1:
trial position data
1 1 70
1 2 73
1 3 80
1 4 75
4 1 80
4 2 90
4 3 85
4 4 53


dataset2:
trial position data
2 1 41
2 2 80
2 3 45
2 4 70
3 1 50
3 2 53
3 3 50
3 4 53

我希望能够分离我的数据,这样,如果每个单独试验的位置1中的数据高于50,那么整个试验信息和数据将放入一个数据集,位置1中低于50的数据将放入一个单独的数据集。如何执行此操作?

我们可以使用
split
获得
列表
输出。通过检查每个“试验”组的“数据”的第一个值是否大于50,我们使用
ave
创建分组变量

lst <- split(dataset,  with(dataset, ave(data, trial, FUN=function(x) x[1]<=50)))
更新 如果在“数据集”中未找到
position=1
,则上述代码可能无法正常工作。我正在使用
dplyr
创建
split
组,条件是如果position==1且数据大于50,则整个组都为真

library(dplyr)
grp <- dataset %>%
          group_by(trial) %>% 
          transmute(ind= any(data>50 & position==1))%>%
          .$ind
split(dataset, grp) 
#   $`FALSE`
#   trial position data
#5      2        1   41
#6      2        2   80
#7      2        3   45
#8      2        4   70
#9      3        1   50
#10     3        2   53
#11     3        3   50
#12     3        4   53

#$`TRUE`
#   trial position data
#1      1        1   70
#2      1        2   73
#3      1        3   80
#4      1        4   75
#13     4        1   80
#14     4        2   90
#15     4        3   85
#16     4        4   53
库(dplyr)
玻璃钢%
组别(试验)%>%
转换(ind=any(数据>50,位置==1))%>%
$ind
拆分(数据集,grp)
#$`错`
#试验位置数据
#5      2        1   41
#6      2        2   80
#7      2        3   45
#8      2        4   70
#9      3        1   50
#10     3        2   53
#11     3        3   50
#12     3        4   53
#$`是的`
#试验位置数据
#1      1        1   70
#2      1        2   73
#3      1        3   80
#4      1        4   75
#13     4        1   80
#14     4        2   90
#15     4        3   85
#16     4        4   53

我们可以如上所述重命名列表元素,并在需要时创建单独的数据集。

这将通过试验将所有数据分离为单独的数据集,但这不是我想要做的。我添加了更多的数据示例,以使其更加清晰。我想分离数据,以便在每个试验中,如果位置1>50,则这是一个数据集,其中包含符合该条件的所有其他试验,如果位置1@RHatesMe将使用
sapply
的错误更新为一组分割条件。e、 e
conditions=c(50100);col=2;sapply(条件,函数(x)数据[数据[,列]@nathanesau根据输入数据,我没有得到预期的输出。这里的条件是只检查每个“试验”组的“数据”列的第一个元素。在您的代码中,您循环检查每个条件并检查第二列的所有元素。@akrun您的解决方案基本正常,但没有正确组织数据,我不知道为什么。仍然有数据超过或少于50的数据点被归类到错误的数据集中。我将提供您需要的任何其他信息。
names(lst) <- paste0('dataset', seq_along(lst))
lst
#$dataset1
#   trial position data
#1      1        1   70
#2      1        2   73
#3      1        3   80
#4      1        4   75
#13     4        1   80
#14     4        2   90
#15     4        3   85
#16     4        4   53

#$dataset2
#   trial position data
#5      2        1   41
#6      2        2   80
#7      2        3   45
#8      2        4   70
#9      3        1   50
#10     3        2   53
#11     3        3   50
#12     3        4   53


list2env(lst, envir=.GlobalEnv)
library(dplyr)
grp <- dataset %>%
          group_by(trial) %>% 
          transmute(ind= any(data>50 & position==1))%>%
          .$ind
split(dataset, grp) 
#   $`FALSE`
#   trial position data
#5      2        1   41
#6      2        2   80
#7      2        3   45
#8      2        4   70
#9      3        1   50
#10     3        2   53
#11     3        3   50
#12     3        4   53

#$`TRUE`
#   trial position data
#1      1        1   70
#2      1        2   73
#3      1        3   80
#4      1        4   75
#13     4        1   80
#14     4        2   90
#15     4        3   85
#16     4        4   53