如何根据条件

时间:2015-08-19 14:55:42

标签: r analysis organization

我想根据R中的某些条件分离我的数据以进行数据分析,但我无法弄清楚如何执行此操作。

我已将数据组合在一起,我希望根据该分组的某些条件将其分开。这是我想要做的一个例子:

原始数据:
数据集:

trial position data
1 1 70
1 2 73
1 3 80
1 4 75
2 1 41
2 2 80
2 3 45
2 4 70
3 1 50
3 2 53
3 3 50
3 4 53
4 1 80
4 2 90
4 3 85
4 4 53

所需数据:

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会被放入一个单独的数据集中。我该怎么做?

1 个答案:

答案 0 :(得分:2)

我们可以使用split来获得list输出。我们使用ave创建分组变量,方法是检查数据的第一个值是否为'每个'试验'大于50。基。

lst <- split(dataset,  with(dataset, ave(data, trial, FUN=function(x) x[1]<=50)))

如果我们在全球环境中需要两个数据集,请命名list元素并使用list2env(不推荐)

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)

更新

如果在“数据集”中找不到position=1的情况,则上述代码可能效果不佳。我正在使用split基于以下条件创建dplyr组:如果存在position == 1且数据大于50,那么我们对整个组获得TRUE。

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

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