根据功能计算序列中的特定行
Counting specific rows in a sequence depending on function
假设我有一个数据框,其中包含许多按顺序排列的行,如下所示:
mag_numbers <- c(rep(seq(1,-1,length.out = 601),times=3),
rep(seq(1,0.98,length.out = 601),times=2))
time <- c(rep(seq(90,54144,length.out = 601),times=2),
rep(seq(90,49850,length.out = 601),times=3))
data = data.frame(time=rep(time,times=6), mag=rep(mag_numbers, times=6))
data
time mag
1 90.00 1.0000000
2 180.09 0.9966667
3 270.18 0.9933333
4 360.27 0.9900000
5 450.36 0.9866667
6 540.45 0.9833333
*
*
*
*
18025 49435.33 0.9801667
18026 49518.27 0.9801333
18027 49601.20 0.9801000
18028 49684.13 0.9800667
18029 49767.07 0.9800333
18030 49850.00 0.9800000
在数据中,我想根据某些条件总结一些参数。这些条件是:
1) 计算那些在 90 到 54000 范围内的时间列行,如果其中一些不在这个范围内,则跳过它们。注意:假设一个 data_set 如果时间值在 90 和 54000 值之间。
2) 在所有 data_set 中,计算有多少 mag 列显示 >0 或 <0 值。注意:一个值就可以表示data_set被switched
3)像这样总结所有状态中的切换状态
ss(switched state)/total(all data_sets)
4)对于满足范围90:54000的数据集,检查第一个观测值<0的mag以及相应的时间。注意:在每个数据集(开关状态数据集)中只有一个时间值和一个幅度值。
输出应该是这样的
1) data_sets
12
2) data_set[mag] < 0
9
3) ss/total
9/12
4)
time mag
data_set1 27207.09 -0.003333333
data_set2 27297.18 -0.006666667
data_set3 27387.27 -0.010000000
data_set4 27477.36 -0.013333333
所以主要问题是如何在函数中执行这些操作?以及读取后目录中的所有数据。
library(dplyr)
地块
有助于查看数据集的含义:
plot(data$mag,type="l")
plot(data$time, type = "l")
lapply(list(seq(1,30)),function(i) text(-600+601*i,0,i))
给数据集一个数字
data$lag <- data$time - lag(data$time) <0
data$lag[is.na(data$lag)] <- 0
data$set <- cumsum(data$lag)
供参考
length(unique(data$set))
# 30
回复点 1)
找出排除和包含哪些数据集
excluded <- unique(filter(data, time > 50000)$set)
length(excluded)
# 12
included <- unique(filter(data, ! set %in% excluded)$set)
length(included)
# 18
回复点2)
如果我理解的很好,你正在寻找
包含正负 mag 值的集合
这些将有 abs(sum(mag) != sum(abs(mag))
switched <- data %>%
group_by(set) %>%
summarise(abs(sum(mag)),
sum(abs(mag)),
changedsign = abs(sum(mag))!=sum(abs(mag)))
length(unique(filter(switched, changedsign)$set))
# 18
length(unique(filter(switched, changedsign &
set %in% included)$set))
# 6
回复点3)
cat(length(unique(filter(switched, changedsign &
set %in% included)$set)),
"/",
length(unique(filter(data, ! set %in% excluded)$set)))
第4点我不是很明白
每个数据集一个图
如果您安装了 ggplot2 包:
library(ggplot2)
ggplot(data, aes(x = time, y = mag,
color = set %in% included)) +
geom_line() +
facet_wrap(~set)
假设我有一个数据框,其中包含许多按顺序排列的行,如下所示:
mag_numbers <- c(rep(seq(1,-1,length.out = 601),times=3),
rep(seq(1,0.98,length.out = 601),times=2))
time <- c(rep(seq(90,54144,length.out = 601),times=2),
rep(seq(90,49850,length.out = 601),times=3))
data = data.frame(time=rep(time,times=6), mag=rep(mag_numbers, times=6))
data
time mag
1 90.00 1.0000000
2 180.09 0.9966667
3 270.18 0.9933333
4 360.27 0.9900000
5 450.36 0.9866667
6 540.45 0.9833333
*
*
*
*
18025 49435.33 0.9801667
18026 49518.27 0.9801333
18027 49601.20 0.9801000
18028 49684.13 0.9800667
18029 49767.07 0.9800333
18030 49850.00 0.9800000
在数据中,我想根据某些条件总结一些参数。这些条件是:
1) 计算那些在 90 到 54000 范围内的时间列行,如果其中一些不在这个范围内,则跳过它们。注意:假设一个 data_set 如果时间值在 90 和 54000 值之间。
2) 在所有 data_set 中,计算有多少 mag 列显示 >0 或 <0 值。注意:一个值就可以表示data_set被switched
3)像这样总结所有状态中的切换状态
ss(switched state)/total(all data_sets)
4)对于满足范围90:54000的数据集,检查第一个观测值<0的mag以及相应的时间。注意:在每个数据集(开关状态数据集)中只有一个时间值和一个幅度值。
输出应该是这样的
1) data_sets
12
2) data_set[mag] < 0
9
3) ss/total
9/12
4)
time mag
data_set1 27207.09 -0.003333333
data_set2 27297.18 -0.006666667
data_set3 27387.27 -0.010000000
data_set4 27477.36 -0.013333333
所以主要问题是如何在函数中执行这些操作?以及读取后目录中的所有数据。
library(dplyr)
地块
有助于查看数据集的含义:
plot(data$mag,type="l")
plot(data$time, type = "l")
lapply(list(seq(1,30)),function(i) text(-600+601*i,0,i))
给数据集一个数字
data$lag <- data$time - lag(data$time) <0
data$lag[is.na(data$lag)] <- 0
data$set <- cumsum(data$lag)
供参考
length(unique(data$set))
# 30
回复点 1)
找出排除和包含哪些数据集
excluded <- unique(filter(data, time > 50000)$set)
length(excluded)
# 12
included <- unique(filter(data, ! set %in% excluded)$set)
length(included)
# 18
回复点2)
如果我理解的很好,你正在寻找 包含正负 mag 值的集合 这些将有 abs(sum(mag) != sum(abs(mag))
switched <- data %>%
group_by(set) %>%
summarise(abs(sum(mag)),
sum(abs(mag)),
changedsign = abs(sum(mag))!=sum(abs(mag)))
length(unique(filter(switched, changedsign)$set))
# 18
length(unique(filter(switched, changedsign &
set %in% included)$set))
# 6
回复点3)
cat(length(unique(filter(switched, changedsign &
set %in% included)$set)),
"/",
length(unique(filter(data, ! set %in% excluded)$set)))
第4点我不是很明白
每个数据集一个图
如果您安装了 ggplot2 包:
library(ggplot2)
ggplot(data, aes(x = time, y = mag,
color = set %in% included)) +
geom_line() +
facet_wrap(~set)