小编ibo*_*oru的帖子

dplyr:在group_by中生成行号/行位置

我有一个数据集,我想按组生成行位置.例如

library(data.table)

data<-data.table(Position=c(1,2,3,4,5,6,7,8,9,10),
Category=c("M","M","M","M","F","F","F","M","M","F"))
Run Code Online (Sandbox Code Playgroud)

我按类别分组,并希望按组创建作为行位置的列.像下面或data.table一样的东西

dataByGroup %>% group_by(Category) %>% mutate(positionInCategory = 1:nrow(Category))
Run Code Online (Sandbox Code Playgroud)

无法弄清楚如何实现这一目标?

期望的输出:

| Position|Category | positionInCategory|
|--------:|:--------|------------------:|
|        1|M        |                  1|
|        2|M        |                  2|
|        3|M        |                  3|
|        4|M        |                  4|
|        5|F        |                  1|
|        6|F        |                  2|
|        7|F        |                  3|
|        8|M        |                  5|
|        9|M        |                  6|
|       10|F        |                  4|
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table

15
推荐指数
2
解决办法
2万
查看次数

使用shinyjs和flexdashbord动态显示/隐藏输入

试图更新侧边栏flexdashboard选项卡上单击时.无法让它发挥作用.

---
title: "Test Sidebar"
output: 
  flexdashboard::flex_dashboard:
     orientation: rows
 runtime: shiny
---

```{r setup}
library(flexdashboard)
library(shiny)
library(shinyjs)
useShinyjs(rmd = TRUE)
```
Sidebar {.sidebar data-width=250}
=======================================================================

```{r}
div(id = "one", selectInput("input1",label= "Show Always",choices=c("a","b","c")))    
div(id = "two",selectInput("input2",label = "Show only on Tab 1", choices=c("d","e","f")))
```

<!-- Update the sidebar based on the tab chosen. Generated HTML code shown for tabs-->

Tab 1 <!-- <a href="#section-tab-1" aria-expanded="true" data-toggle="tab"> -->
=======================================================================
```{r}
useShinyjs(rmd = TRUE)
shinyjs::onclick("#section-tab-2",shinyjs::hide(id = "two"))
shinyjs::onclick("#section-tab-1",shinyjs::show(id = …
Run Code Online (Sandbox Code Playgroud)

javascript r shiny shinyjs flexdashboard

10
推荐指数
1
解决办法
843
查看次数

创建带有计数和百分比的列联表 Pandas

有没有更好的方法可以使用 pd.crosstab() 或 pd.pivot_table() 在 Pandas 中创建列联表来生成计数百分比

当前解决方案

cat=['A','B','B','A','B','B','A','A','B','B']
target = [True,False,False,False,True,True,False,True,True,True]

import pandas as pd
df=pd.DataFrame({'cat' :cat,'target':target})
Run Code Online (Sandbox Code Playgroud)

使用交叉表

totals=pd.crosstab(df['cat'],df['target'],margins=True).reset_index()
percentages = pd.crosstab(df['cat'],
   df['target']).apply(lambda row: row/row.sum(),axis=1).reset_index()
Run Code Online (Sandbox Code Playgroud)

和合并

summaryTable=pd.merge(totals,percentages,on="cat")
summaryTable.columns=['cat','#False',
    '#True','All','percentTrue','percentFalse']
Run Code Online (Sandbox Code Playgroud)

输出

+---+-----+--------+-------+-----+-------------+--------------+
|   | cat | #False | #True | All | percentTrue | percentFalse |
+---+-----+--------+-------+-----+-------------+--------------+
| 0 | A   |      2 |     2 |   4 | 0.500000    | 0.500000     |
| 1 | B   |      2 |     4 |   6 | 0.333333    | 0.666667 …
Run Code Online (Sandbox Code Playgroud)

python pivot-table crosstab pandas

8
推荐指数
1
解决办法
4047
查看次数

r 为 modebarButtons 设置全局选项

创建 ggplot 对象的绘图对象。是否可以全局设置模式栏选项,以便每个绘图仅显示以下模式栏按钮,如 myPlot_c 中所示。

library(ggplot2)
library(plotly)
library(dplyr)


myPlot_a <- ggplot(mtcars, aes(x=disp,y=mpg)) + geom_point()
myPlot_b <- ggplotly(myPlot_a)

#Is it possible to set this global, so don't have to repeat for each plot
myPlot_c <- myPlot_b %>% 
  config(displaylogo=F,
         modeBarButtonsToRemove = 
           list("sendDataToCloud","zoom2d","pan2d","select2d","lasso2d",
                "zoomIn2d","zoomOut2d","autoScale2d","hoverClosestCartesian",
                "hoverCompareCartesian"))
Run Code Online (Sandbox Code Playgroud)

我可以包装在一个函数中,但发现如果每次都设置 modebarButtons,则与闪亮的应用程序结合使用 renderPlotly() 会遇到很多滞后。

r ggplot2 shiny plotly

5
推荐指数
1
解决办法
709
查看次数

从另一个 DataFrame 替换 pandas.DataFrame 中的值的优雅方法

我有一个数据框,我想用另一个数据框的值替换一列中的值。

df = pd.DataFrame({'id1': [1001,1002,1001,1003,1004,1005,1002,1006],
                   'value1': ["a","b","c","d","e","f","g","h"],
                   'value3': ["yes","no","yes","no","no","no","yes","no"]})

dfReplace = pd.DataFrame({'id2': [1001,1002],
                   'value2': ["rep1","rep2"]})
Run Code Online (Sandbox Code Playgroud)

我需要使用带有公用键的 groupby,当前的解决方案是使用循环。有没有更优雅(更快)的方法来使用 .map(apply) 等。我想最初使用 pd.update(),但似乎不是正确的方法。

groups = dfReplace.groupby(['id2'])

for key, group in groups:
    df.loc[df['id1']==key,'value1']=group['value2'].values
Run Code Online (Sandbox Code Playgroud)

输出

df
    id1   value1 value3
0   1001  rep1   yes
1   1002  rep2   no
2   1001  rep1   yes
3   1003  d      no
4   1004  e      no
5   1005  f      no
6   1002  rep2   yes
7   1006  h      no
Run Code Online (Sandbox Code Playgroud)

python apply pandas

3
推荐指数
2
解决办法
1万
查看次数

在事件之前计算行数 - data.table

我有一个数据集,包括用户和顺序事件以及中间的非事件.

DT = data.table(user = c("1001","1001","1001","1001","1001","1001",
                          "1002","1002","1002","1002"), 
               event = c(NA,"e1",NA,NA,NA,"e2",
                           "e1",NA,NA,"e2"))
Run Code Online (Sandbox Code Playgroud)

我希望能够在用户组发生事件之前计算行(非事件).预期结果:

   user  event  rows.before.event
 1: 1001    NA                 NA
 2: 1001    e1                  1
 3: 1001    NA                 NA
 4: 1001    NA                 NA
 5: 1001    NA                 NA
 6: 1001    e2                  3
 7: 1002    e1                  0
 8: 1002    NA                 NA
 9: 1002    NA                 NA
10: 1002    e2                  2
Run Code Online (Sandbox Code Playgroud)

试过rleid()但没有成功.欢迎任何建议.

r data.table

3
推荐指数
2
解决办法
145
查看次数

data.table默认外连接与setkey,计数行(列表键的频率)

我有两个data.tables.我想在一个中使用键来计算另一个中的键.

DT1 <- data.table(A = c("v1","v2","v1","v2","v3","v4","v5","v6","v1","v2"),
                  B = c(1,11,111,2,22,222,3,33,333,4))
DT2 <- data.table(C = c("v1","v3","v99"))

setkey(DT1,A)
setkey(DT2,C)
Run Code Online (Sandbox Code Playgroud)

使用DT2查找DT1中的行将返回外部联接.

nrow(DT1[DT2,]) #returns 5 (v1*3, v3*1, v99) "v99" not in DT2
DT1[DT2,]

    A   B
1:  v1   1
2:  v1 111
3:  v1 333
4:  v3  22
5: v99  NA
Run Code Online (Sandbox Code Playgroud)

是否可以使用相同的语法强制左连接?

r left-join outer-join data.table

2
推荐指数
1
解决办法
75
查看次数

方向上的ggplot geom_line颜色线

如何向geom_line()添加缩放颜色以指示线段向上/向下 - 无需使用重塑,dcast预处理数据并创建另一个变量?

library(data.table)
library(ggplot2)

my.data <- data.table(id = c(1,1,2,2,3,3,4,4), 
                  loc = c("a","b","a","b","a","b","a","b"),
                  value = c(10.3,11.5,12.5,12.1,10.5,9.8,9.7,10.7))

p<-ggplot(my.data ,aes(x=loc,y=value,group=id)) + geom_line()
Run Code Online (Sandbox Code Playgroud)

r ggplot2

1
推荐指数
1
解决办法
264
查看次数