我有一个带有变量时间,深度,最小值和chla的数据帧df:
datetime depth minmax chla
2014-07-19 07:22:27 15.04 max 7.142671
2014-07-19 07:22:28 15.03 0 6.265014
2014-07-19 07:22:29 15.02 0 7.184299
2014-07-19 07:22:30 15.00 0 6.313580
2014-07-19 07:22:31 14.98 0 6.695170
2014-07-19 07:22:32 14.96 0 5.748133
2014-07-19 07:22:33 14.96 min 6.431526
2014-07-19 07:22:34 14.99 0 6.362146
2014-07-19 07:22:35 14.99 0 7.114919
2014-07-19 07:22:36 14.93 max 7.628331
2014-07-19 07:22:37 14.71 0 5.848734
2014-07-19 07:22:38 14.42 0 6.382960
2014-07-19 07:22:39 13.97 0 8.516395
2014-07-19 07:22:40 13.50 0 6.518251
2014-07-19 07:22:40 12.90 0 6.549472
2014-07-19 07:22:42 12.36 0 5.425516
2014-07-19 07:22:43 11.82 0 5.095961
2014-07-19 07:22:44 11.23 0 5.272880
2014-07-19 07:22:45 10.68 0 5.210438
2014-07-19 07:22:46 10.01 0 4.804565
2014-07-19 07:22:47 9.38 0 5.123713
2014-07-19 07:22:48 8.76 0 3.923439
2014-07-19 07:22:49 8.02 0 3.566132
2014-07-19 07:22:50 7.37 0 2.657254
2014-07-19 07:22:51 6.65 0 2.664192
2014-07-19 07:22:52 6.04 0 2.671130
2014-07-19 07:22:52 5.48 0 2.674599
2014-07-19 07:22:53 4.84 0 2.681537
2014-07-19 07:22:54 4.36 0 1.817756
2014-07-19 07:22:55 3.94 0 1.828163
2014-07-19 07:22:56 3.76 0 1.796942
2014-07-19 07:22:57 3.73 0 1.557581
2014-07-19 07:22:58 3.87 min 2.018958
2014-07-19 07:22:59 4.14 0 2.143842
2014-07-19 07:23:00 4.53 0 1.481263
....
我想做什么:
删除min和max之间差异的所有行(反之亦然)< 5.重要的是,只要差值> = 5(大于或等于5),就会保留min和max之间的所有行(标记为0)。
这是一个很大的数据框架,这只是一个摘录。但是最后提到它应该是这样的。
datetime depth minmax chla
2014-07-19 07:22:36 14.93 max 7.628331
2014-07-19 07:22:37 14.71 0 5.848734
2014-07-19 07:22:38 14.42 0 6.382960
2014-07-19 07:22:39 13.97 0 8.516395
2014-07-19 07:22:40 13.50 0 6.518251
2014-07-19 07:22:40 12.90 0 6.549472
2014-07-19 07:22:42 12.36 0 5.425516
2014-07-19 07:22:43 11.82 0 5.095961
2014-07-19 07:22:44 11.23 0 5.272880
2014-07-19 07:22:45 10.68 0 5.210438
2014-07-19 07:22:46 10.01 0 4.804565
2014-07-19 07:22:47 9.38 0 5.123713
2014-07-19 07:22:48 8.76 0 3.923439
2014-07-19 07:22:49 8.02 0 3.566132
2014-07-19 07:22:50 7.37 0 2.657254
2014-07-19 07:22:51 6.65 0 2.664192
2014-07-19 07:22:52 6.04 0 2.671130
2014-07-19 07:22:52 5.48 0 2.674599
2014-07-19 07:22:53 4.84 0 2.681537
2014-07-19 07:22:54 4.36 0 1.817756
2014-07-19 07:22:55 3.94 0 1.828163
2014-07-19 07:22:56 3.76 0 1.796942
2014-07-19 07:22:57 3.73 0 1.557581
2014-07-19 07:22:58 3.87 min 2.018958
2014-07-19 07:22:59 4.14 0 2.143842
2014-07-19 07:23:00 4.53 0 1.481263
...
直到知道我尝试了subset(),
abs()
。
答案 0 :(得分:0)
你的描述和目标并不十分清楚,所以我做了一些假设......
我正确理解你的目标
1A。您提供的示例输入和所需输出完全符合您的目标
1B。更具体地说,如果{
"students": [
{
"courseId": "303431573",
"userId": "104377167089915657872",
"profile": {
"id": "104377167089915657872",
"name": {
"givenName": "student2",
"familyName": "User",
"fullName": "student2 User"
},
"emailAddress": "student2_rvnqrmpxeraft-mcygui@classroom-dev.com",
"photoUrl": "https://lh3.googleusercontent.com/-XdUIqdMkCWA/AAAAAAAAAAI/AAAAAAAAAAA/4252rscbv5M/photo.jpg"
}
},
{
"courseId": "303431573",
"userId": "104304056850029354748",
"profile": {
"id": "104304056850029354748",
"name": {
"givenName": "student1",
"familyName": "User",
"fullName": "student1 User"
},
*"emailAddress": "student1_kb5ysml_yw4l2ecbu581@classroom-dev.com",
"photoUrl": "https://lh3.googleusercontent.com/-XdUIqdMkCWA/AAAAAAAAAAI/AAAAAAAAAAA/4252rscbv5M/photo.jpg"*
}
}
]
}
与任何max
之间的行数相同,您希望将max
出现的每一行移至min
的下一次出现。小于5。
2.每个max
都有一个min
3.它们总是以相同的顺序出现
鉴于这些假设,以下代码会产生所需的结果。
max
要将代码中断minInd = which(df$minmax == 'min')
maxInd = which(df$minmax == 'max')
minToMax = do.call(c,
lapply(
which( (maxInd[-1] - minInd[-length(minInd)]) < 5 ),
function(x) {
seq(maxInd[x],(maxInd[x+1]-1))
}
)
)
maxToMin = do.call(c,
lapply(
which( (minInd - maxInd) < 5 ),
function(x) {
seq(maxInd[x],(maxInd[x+1]-1))
}
)
)
final = c(maxToMin,minToMax)
newDf = df[-final,]
和minInd
,您的数据中会出现maxInd
和min
。
max
告诉我们min和max之间的差异小于5,即前向关系。后向关系由which( (minInd - maxInd) < 5 )
这两个函数给出了我们比较的索引向量之间的差异,即数据的哪些变量集表现出不希望的行为。我们在此序列上调用which( (maxInd[-1] - minInd[-length(minInd)]) < 5 )
来创建要从数据框lapply
中删除的行序列。
由于df
返回一个我们想要合并到一个长向量中的序列列表。我们执行lapply
,这实际上意味着do.call(c,resultFromLAPPLY)
。这些向量映射保存为两个变量c(list[[1]], ... ,list[[length(list)]])
和maxToMin
。最后,我们将它们组合成一个向量minToMax
。
回想一下,final
包含我们希望从final
中移除的行的行数,因此我们使用df
保存所需的结果
编辑:为代码引入了一些换行符以便于阅读。