如何根据条件分离R中的数据
我想根据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
数据集: 所需数据:
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、 econditions=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