2017-10-13 127 views
1

要声明:我正在寻找的所有东西都像if语句,如果数据框没有行,它会以某种方式忽略整个add_trace函数。R - 忽略空?

我有下列R-代码:

g <- plot_ly(df, x = ~Day) %>% 
    add_trace(data=df[which(df$FcNum==1),], y = ~ProjAmount, name = 'Line 1', hoverinfo = "text", text = ~paste('Projected Amt: ', round(ProjAmount,2)), mode = 'lines', width = 1, connectgaps = "false") %>% 
    add_trace(data=df[which(df$FcNum==2),], y = ~ProjAmount, name = 'Line 2', hoverinfo = "text", text = ~paste('Projected Amt: ', round(ProjAmount,2)), mode = 'lines', width = 1, connectgaps = "false") 

我的数据帧是这样的:

Day  Amount ProjAmt  FcNum  
1   10.4  55   1   
1   10.4  37   2   
2   22.1  55   1   
2   22.1  37   2   
3   43.5  55   1   
3   43.5  37   2   
4   24.1  55   1   
4   24.1  55   2   
...   ...  ... 
34   37.8  75   1   
34   37.8  99   2   
35   12.8  75   1   
35   12.8  99   2   

我使用的可视化工具失败的脚本时,我就FcNum过滤(这样当我添加一个过滤器的视觉,并说“只给我价值,其中FcNum是1”)。可视化失败,因为FcNum == 2中不再有值,并且它返回以下错误消息:“错误:变量必须是长度为1或1”。

(有啥幕后发生的事情是它的过滤数据帧到这个样子,注意到在FcNum列中的值:

Day  Amount ProjAmt  FcNum  
1   10.4  55   1   
2   22.1  55   1   
3   43.5  55   1   
4   24.1  55   1   
...   ...  ... 
34   37.8  75   1   
35   12.8  75   1 

换句话说,当代码3号线没有返回值,因为它要求每个变量的值都是1或1,所以无法显示图形。

是否有一个函数,可能在基数R中允许我在数据框为空时设置替代值?

我试过了像

add_trace(data=na.omit(df[which(df$FcNum==2),]), y = ~ProjAmount, name = 'Line 2', hoverinfo = "text", text = ~paste('Projected Amt: ', round(ProjAmount,2)), mode = 'lines', width = 1, connectgaps = "false") 

....但那并没有工作。

+0

ProjAmount与ProjAmt是同一个变量吗? – jsb

+0

@jsb - 是的,你是对的 – james5

回答

0

下面的代码似乎工作正常(没有错误或警告)。我添加了type = "scatter"并删除了width = 1

# First 8 rows of your data 
df <- structure(list(Day = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L), Amount = c(10.4, 
10.4, 22.1, 22.1, 43.5, 43.5, 24.1, 24.1), ProjAmount = c(55L, 
37L, 55L, 37L, 55L, 37L, 55L, 55L), FcNum = c(1L, 2L, 1L, 2L, 
1L, 2L, 1L, 2L)), .Names = c("Day", "Amount", "ProjAmount", "FcNum" 
), class = "data.frame", row.names = c(NA, -8L)) 

library(plotly) 

plot_ly(df, x = ~ Day) %>% 
    add_trace(
    data = df[which(df$FcNum == 1), ], 
    type = "scatter", # new line 
    y = ~ ProjAmount, 
    name = 'Line 1', 
    hoverinfo = "text", 
    text = ~ paste('Projected Amt: ', round(ProjAmount, 2)), 
    mode = 'lines', 
    # width = 1, 
    connectgaps = "false" 
) %>% 
    add_trace(
    data = df[which(df$FcNum == 2), ], 
    type = "scatter", # new line 
    y = ~ ProjAmount, 
    name = 'Line 2', 
    hoverinfo = "text", 
    text = ~ paste('Projected Amt: ', round(ProjAmount, 2)), 
    mode = 'lines', 
    # width = 1, 
    connectgaps = "false" 
) 
+0

是的,我知道在R Studio中有效,但它在我使用的可视化工具中不起作用。我期待使用if语句作为解决方法。我想告诉它不要add_trace,如果在指定的过滤器上下文中data.frame中没有行 – james5