让我们说我有一个由排序的行组成的数据框,如下所示:
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_sets中,计算有多少mag列显示&gt; 0或&lt; 0值。注意:一个值足以指示data_set已切换
3)总结所有状态内的切换状态,如
ss(switched state)/total(all data_sets)
4)对于满足范围90:54000的数据集,检查mag以查看数字&lt; 0的第一次观察以及相应的时间。注意:在每个数据集(交换状态数据集)中,只有一个时间值和一个mag值。
输出应该是这样的
1)data_sets
12
2)data_set [mag]&lt; 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
所以主要问题是如何在函数中执行这些操作?读完后,目录中的所有数据。
答案 0 :(得分:1)
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
找出排除和包含哪些数据集
excluded <- unique(filter(data, time > 50000)$set)
length(excluded)
# 12
included <- unique(filter(data, ! set %in% excluded)$set)
length(included)
# 18
如果我理解得很好,你正在寻找 包含正和负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
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)