【发布时间】:2019-05-17 23:35:30
【问题描述】:
我有一个类似于this 和this 帖子中使用的数据框。原因是我需要在我的数据集中创建三个不同的变量,并且我为每个问题写了不同的帖子,因为它们的处理方式彼此不同。
df1总结了不同时间不同鱼在不同地方的深度。 df2 以 8 米的间隔(m0-7、m8-15、m16-23、m24-31 和 m32-39)总结了随时间(每三个小时)从地表到 39 米深度的洋流强度一个特定的地方。举个例子:
df1<-data.frame(Datetime=c("2016-08-01 15:34:07","2016-08-01 16:25:16","2016-08-01 17:29:16","2016-08-01 18:33:16","2016-08-01 20:54:16","2016-08-01 22:48:16"),Site=c("BD","BD","BD","BD","BD","BD"),Ind=c(16,17,19,16,17,16), Depth=c(5.3,24,36.4,42,NA,22.1))
df1$Datetime<-as.POSIXct(df1$Datetime, format="%Y-%m-%d %H:%M:%S",tz="UTC")
> df1
Datetime Site Ind Depth
1 2016-08-01 15:34:07 BD 16 5.3
2 2016-08-01 16:25:16 BD 17 24.0
3 2016-08-01 17:29:16 BD 19 36.4
4 2016-08-01 18:33:16 BD 16 42.0
5 2016-08-01 20:54:16 BD 17 NA
6 2016-08-01 22:48:16 BD 16 22.1
df2<-data.frame(Datetime=c("2016-08-01 12:00:00","2016-08-01 15:00:00","2016-08-01 18:00:00","2016-08-01 21:00:00","2016-08-02 00:00:00"), Site=c("BD","BD","BD","BD","BD"),var1=c(2.75,4,6.75,2.25,4.3),var2=c(3,4,4.75,3,2.1),var3=c(2.75,4,9.8,2.25,1.4),var4=c(3.25,3,6.5,8.9,3.4),var5=c(3,4,2.3,2.6,1.7))
df2$Datetime<-as.POSIXct(df2$Datetime, format="%Y-%m-%d %H:%M:%S",tz="UTC")
colnames(df2)<-c("Datetime","Site","m0-7","m8-15","m16-23","m24-31","m32-39")
> df2
Datetime Site m0-7 m8-15 m16-23 m24-31 m32-39
1 2016-08-01 12:00:00 BD 2.75 3.00 2.75 3.25 3.0
2 2016-08-01 15:00:00 BD 4.00 4.00 4.00 3.00 4.0
3 2016-08-01 18:00:00 BD 6.75 4.75 9.80 6.50 2.3
4 2016-08-01 21:00:00 BD 2.25 3.00 2.25 8.90 2.6
5 2016-08-02 00:00:00 BD 4.30 2.10 1.40 3.40 1.7
我想在df1 中创建一个名为Outside_currents 的新变量,以反映鱼是否避免高电流。我将Outside_currents 列定义为“告诉我,当鱼有机会出现或不出现时,它是否会避免处于高电流层中”。我的鱼总是在大于 15 米的深度移动,所以我只考虑最后三列(m16-23、m24-31 和m32-39)的计算。
将其转化为数学:
Outside_currents:“当考虑的三层中的一层或两层(m16-23、m24-31 和 m32-39)的电流强度比其他一层或两层大三倍时,鱼在外面吗?” .
可能的答案是:
-
Yes:鱼在当前强度比其他一层或两层低三倍的层中。 -
No:鱼在水流强度是其他层三倍以上的层中。 -
NA:当该条件不存在时(没有任何层的电流强度是其他层的 3 倍),或者当可变深度为“NA”时。
我希望这样:
> df1
Datetime Site Ind Depth Out_current
1 2016-08-01 15:34:07 BD 16 5.3 NA
2 2016-08-01 16:25:16 BD 17 24.0 NA
3 2016-08-01 17:29:16 BD 19 36.4 YES
4 2016-08-01 18:33:16 BD 16 42.0 YES
5 2016-08-01 19:33:16 BD 17 24.0 NO
6 2016-08-01 20:54:16 BD 16 NA NA
7 2016-08-01 22:48:16 BD 16 22.1 NA
【问题讨论】:
-
这个问题的 90% 似乎在重复您之前的问题:stackoverflow.com/questions/56190193/… 有没有办法可以让您的问题更简单,以便我们可以帮助您解决尚未解决的问题已解决,这可能对其他人更有用。
-
为什么第 3 行和第 4 行是
YES?它们似乎没有大三倍,但也许我看错了值。 -
我上面提到的这个问题和stackoverflow.com/questions/56191446/…之间有很多重叠
-
感谢您的评论 william3031 和 Jon Spring。 @JonSpring,这篇文章与我在其他帖子中遇到的其他帖子不同。我使用了相同的示例,因为在这 3 种情况下,我使用相同的数据集,但我需要创建不同的变量,所有变量都与电流相关。其中一篇文章是计算鱼所在深度的电流强度,另一篇文章是计算鱼不在的地方的平均电流,而这篇文章是看另一个不同的问题:鱼会避开大电流吗?这个问题的方法不同,我现在不知道该怎么做。
-
其实这里我稍微改一下数据框
df2。 @william3031,你是对的......我在df2上犯了一个错误,我用错了。我已经改变了它,现在你可以看到为什么df1[3 , ]和df1[4 , ]是YES,因为在df2(18:00:00)中这些日期时间最接近,如果我们只看最后三个深度层,我们看到在 32 到 39 米之间的深度,水流比m16-23和m24-31层低三倍以上,由于鱼在 36 或 42 米深度,他选择在潮流之外。
标签: r dataframe dplyr tidyverse lubridate