我希望在处理后选择data.list
的特定元素。
要获取过程参数,我在可重现的示例中描述了我的问题。
在下面的示例代码中,我有三组data.list
,每组有5列。
每个data.list
每次重复三次,每个data.list
分配一个名为set_nbr
的唯一编号来定义这些数据集。
#to create reproducible data (this part creates three sets of data each one repeats 3 times of those of Mx, My and Mz values along with set_nbr)
set.seed(1)
data.list <- lapply(1:3, function(x) {
nrep <- 3
time <- rep(seq(90,54000,length.out=600),times=nrep)
Mx <- c(replicate(nrep,sort(runif(600,-0.014,0.012),decreasing=TRUE)))
My <- c(replicate(nrep,sort(runif(600,-0.02,0.02),decreasing=TRUE)))
Mz <- c(replicate(nrep,sort(runif(600,-1,1),decreasing=TRUE)))
df <- data.frame(time,Mx,My,Mz,set_nbr=x)
})
在应用某些功能后,我有这样的输出。
result
time Mz set_nbr
1 27810 -1.917835e-03 1
2 28980 -1.344288e-03 1
3 28350 -3.426615e-05 1
4 27900 -9.934413e-04 1
5 25560 -1.016492e-02 2
6 27360 -4.790767e-03 2
7 28080 -7.062256e-04 2
8 26550 -1.171716e-04 2
9 26820 -2.495893e-03 3
10 26550 -7.397865e-03 3
11 26550 -2.574022e-03 3
12 27990 -1.575412e-02 3
我的问题从这里开始。
1)如何为每个min
获取middle
列的max
,time
和set_nbr
值?
2)如何在set_nbr
内使用已评估的Mz
和data.list
值?
简而言之;
确定min
列中的middle
,max
和time
值以及{{1}中每个Mz
的相应set_nbr
值后我希望返回原始data.list并根据result
和Mx
值的那些提取My
,Mz
,set_nbr
的列。由于每个Mz
实际上对应600行,因此我想从set_nbr
set_nbr
系列
我们使用data.list
作为time
来选择factor
。这里set_nbr
表示提取参数不是R命令中的真实factor
。
此外,正如您将看到每个数据集存在四个set_nbr,但它们确实在factor
答案 0 :(得分:1)
在适当的时候,我是using lists of data frames的主要提倡者,但在这种情况下,看起来没有任何理由将它们作为不同的列表项分开。让我们将它们组合成一个数据框。
library(dplyr)
dat = bind_rows(data.list)
然后轻松获取摘要统计信息:
dat %>% group_by(set_nbr) %>%
summarize(min_time = min(time),
max_time = max(time),
middle_time = median(time))
# Source: local data frame [3 x 4]
#
# set_nbr min_time max_time middle_time
# 1 1 90 54000 27045
# 2 2 90 54000 27045
# 3 3 90 54000 27045
在您的示例数据中,time
每次都以相同的方式定义,因此当然,min,median和max都是相同的。
我建议您在新问题中询问有关绘图的问题,从合并数据框dat
开始。
至于你的第二个问题:
2)如何在data.list中选择评估的set_nbr值?
从列表中选择单个项目,使用双括号
data.list[[2]]
但是,对于组合数据,它只是普通数据框的正常列,因此任何这些都可以工作:
dat[dat$set_nbr == 2, ]
subset(dat, set_nbr == 2)
filter(dat, set_nbr == 2)
如果您想要time
和set_nbr
在results
对象的Mx和My值,并使用上面的合并dat
,请在评论中澄清一下加入:left_join(results, dat)
。
此应有效,但我很困惑,因为在您的模拟数据中time
是数字,但在您的新文字中,您说&#34;我们使用{{ 1}}作为time
&#34;。如果您已将时间转换为系数对象,则只有在数据列表中的每个数据框中具有相同的factor
时才会生效。如果没有,我建议将levels
保留为time
。