我想根据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会被放入一个单独的数据集中。我该怎么做?
答案 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
我们可以如上所述重命名列表元素,并在需要时创建单独的数据集。