如何 select 特定元素并在 data.frame 中找到它们的索引?
How to select specific elements and find their index in a data.frame?
我想select一个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) 如何为每个 set_nbr
获取 time
列的 min
、middle
和 max
值?
2) 如何在 data.list
中使用评估的 set_nbr
和 Mz
值?
简而言之;
确定 time
列中的 min
、middle
和 max
值以及 set_nbr
中每个 set_nbr
对应的 Mz
值后=33=],我想 return 回到原来的 data.list 并根据 set_nbr
的那些提取 Mx
, My
, Mz
的那些列] 和 Mz
值。由于每个 set_nbr
实际上对应 600 行,我想从 data.list
中提取那些定义的 set_nbr
s 系列
我们使用 time
作为 factor
到 select set_nbr
。这里 factor
表示作为提取参数而不是 R 命令中的真正 factor
。
此外,正如您将看到的,每个数据集存在四个 set_nbr,但它们确实针对 data.list
中的不同数据集
我是 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
每次都以相同的方式定义,因此当然最小值、中值和最大值都是相同的。
我建议,在你提出的关于绘图的新问题中,从组合数据框开始 dat
。
关于你的第二个问题:
2) How to select evaluated set_nbr values inside of data.list?
从列表中选择单个项目,使用双括号
data.list[[2]]
但是,对于组合数据,它只是普通数据框的普通列,因此任何这些都可以工作:
dat[dat$set_nbr == 2, ]
subset(dat, set_nbr == 2)
filter(dat, set_nbr == 2)
根据您在评论中的说明,如果您想要 results
对象中 time
和 set_nbr
的 Mx 和 My 值,请使用我上面的组合 dat
,只需做一个连接:left_join(results, dat)
.
这个 应该 工作,但我有点困惑,因为在你的模拟数据中 time
是数字,但在你的新文本中你说 "we use time
as a factor
".如果您已将时间转换为因子对象,则只有当它在数据列表中的每个数据框中具有相同的 levels
时才有效。如果不是,我建议将 time
保留为 numeric
。
我想select一个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) 如何为每个 set_nbr
获取 time
列的 min
、middle
和 max
值?
2) 如何在 data.list
中使用评估的 set_nbr
和 Mz
值?
简而言之;
确定 time
列中的 min
、middle
和 max
值以及 set_nbr
中每个 set_nbr
对应的 Mz
值后=33=],我想 return 回到原来的 data.list 并根据 set_nbr
的那些提取 Mx
, My
, Mz
的那些列] 和 Mz
值。由于每个 set_nbr
实际上对应 600 行,我想从 data.list
set_nbr
s 系列
我们使用 time
作为 factor
到 select set_nbr
。这里 factor
表示作为提取参数而不是 R 命令中的真正 factor
。
此外,正如您将看到的,每个数据集存在四个 set_nbr,但它们确实针对 data.list
我是 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
每次都以相同的方式定义,因此当然最小值、中值和最大值都是相同的。
我建议,在你提出的关于绘图的新问题中,从组合数据框开始 dat
。
关于你的第二个问题:
2) How to select evaluated set_nbr values inside of data.list?
从列表中选择单个项目,使用双括号
data.list[[2]]
但是,对于组合数据,它只是普通数据框的普通列,因此任何这些都可以工作:
dat[dat$set_nbr == 2, ]
subset(dat, set_nbr == 2)
filter(dat, set_nbr == 2)
根据您在评论中的说明,如果您想要 results
对象中 time
和 set_nbr
的 Mx 和 My 值,请使用我上面的组合 dat
,只需做一个连接:left_join(results, dat)
.
这个 应该 工作,但我有点困惑,因为在你的模拟数据中 time
是数字,但在你的新文本中你说 "we use time
as a factor
".如果您已将时间转换为因子对象,则只有当它在数据列表中的每个数据框中具有相同的 levels
时才有效。如果不是,我建议将 time
保留为 numeric
。