我有频率数据(间隔-1分钟)。我想计算数据带外的连续时间(band-49到51)。我不想要总时间。我需要连续的时间,它可能会在不同的时间发生。假设在下午6点的一天频率样本是48.3 48.2,48.7,49.1。结果应该是3分钟。使用R或Excel,我该怎么办?
答案 0 :(得分:1)
在Tableau中,您可以使用沿时间维度运行的表计算。
例如,将名为 in_band 的计算字段定义为
[Frequency] >= 49 and [Frequency] <= 51
然后将名为 current_minutes_out_of_band 的计算字段设为
if attr(in_band) then 0 else previous_value(0) + 1 end
如果你将MINUTE(TIME)放在Rows架子上并使其离散,你可以将current_minutes_out_of_band放在Text架子上,并观察计数器在带外累积分钟数。
只要频率返回到所需频段,此表达式就会将计数器重置为零。如果你想要一个运行总计,那就更容易了 - 只需定义一个字段,如果in_band则返回1,否则返回0。将该字段放在架子上,右键单击它并选择快速表Calc运行总计
这假设每分钟有一个数据行没有间隙。可以概括为避免这些假设。
表格计算是在客户端/服务器划分的客户端计算的,因此需要在线路上获取每一行的时间和频率。对于大型数据集,在数据源上进行计算通常更有效,并仅返回聚合结果。 SQL窗口函数或Oracle分析函数可以做到这一点。
表格计算还取决于正确设置寻址和分区。有关详细信息,请参阅表格计划上的文档。
答案 1 :(得分:0)
在Excel中,您可以使用数组公式来搜索范围内的下一个频率: -
=MATCH(1,(B2:B$10>=49)*(B2:B$10<=51),0)-1
如果您的频率从B2开始。
必须使用 Ctrl Shift 输入
输入C2这是一个修改版本,它允许最后一个频率超出范围的情况,假设频率值之间没有空白,最后一个或多个空白:
=MATCH(1,(B2:B$10>=49)*(B2:B$10<=51)+(B2:B$10=""),0)-1
答案 2 :(得分:0)
这可以使用times <- paste0("18:0", 0:8)
freq <- c(48.3, 48.2, 48.7, 49.1, 50, 51.1, 51.2, 52, 50)
函数在R中优雅地完成,该函数计算数据的行程编码。考虑一些示例输入:
rle
我们可以使用with(rle(freq < 49 | freq > 51), lengths[values])
# [1] 3 3
确定带外时间的长度(每段3分钟的2段):
with(rle(freq < 49 | freq > 51), times[cumsum(lengths)][values])
# [1] "18:02" "18:07"
我们还可以确定这些运行结束的时间:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
NSDictionary *notificationPayload = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
NSString *productId = [notificationPayload objectForKey:@"p"];
if (notification) {
//this will only trigger when the app has been opend from a remote PUSH notification!!
[self application:application didReceiveRemoteNotification:(NSDictionary*)notification];
_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[_window makeKeyAndVisible];
_customRootViewController = [EZPUSHEXAMPLENavigationController new];
[_customRootViewController setNavigationBarHidden:true];
[self.window setRootViewController:_customRootViewController];
if ([PFUser currentUser] == nil) {
[self registerForNotifications:application launchOptions:launchOptions];
EZPUSHEXAMPLEPreSplashViewController * splashScreen = [[EZPUSHEXAMPLEPreSplashViewController alloc] init];
[_customRootViewController setViewControllers:@[splashScreen] animated:TRUE];
} else {
EZPUSHEXAMPLEPreSplashViewController * splashScreen = [[EZPUSHEXAMPLEPreSplashViewController alloc] init];
EZPUSHEXAMPLECustomTabBarController * mvc = [[EZPUSHEXAMPLECustomTabBarController alloc] init];
[mvc.navigationController.navigationBar setTranslucent:TRUE];
[mvc.navigationController.navigationBar setBackgroundColor:[UIColor clearColor]];
[(EZPUSHEXAMPLEFeedViewController*)[[[[mvc viewControllers] objectAtIndex:0] viewControllers] objectAtIndex:0] setProductId:productId];
[_customRootViewController setViewControllers:@[splashScreen, mvc] animated:TRUE];
}
return YES;
} else {
_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[_window makeKeyAndVisible];
_customRootViewController = [EZPUSHEXAMPLENavigationController new];
[_customRootViewController setNavigationBarHidden:true];
[self.window setRootViewController:_customRootViewController];
if ([PFUser currentUser] == nil) {
[self registerForNotifications:application launchOptions:launchOptions];
EZPUSHEXAMPLEPreSplashViewController * splashScreen = [[EZPUSHEXAMPLEPreSplashViewController alloc] init];
[_customRootViewController setViewControllers:@[splashScreen] animated:TRUE];
} else {
EZPUSHEXAMPLEPreSplashViewController * splashScreen = [[EZPUSHEXAMPLEPreSplashViewController alloc] init];
EZPUSHEXAMPLECustomTabBarController * mvc = [[EZPUSHEXAMPLECustomTabBarController alloc] init];
[mvc.navigationController.navigationBar setTranslucent:TRUE];
[mvc.navigationController.navigationBar setBackgroundColor:[UIColor clearColor]];
[_customRootViewController setViewControllers:@[splashScreen, mvc] animated:TRUE];
}
return YES;
}
}