小编Shi*_*obe的帖子

Tidyverse:过滤分组数据帧中的n个最大组

我想根据计数过滤n个最大的组,然后对过滤的数据帧进行一些计算

这是一些数据

Brand <- c("A","B","C","A","A","B","A","A","B","C")
Category <- c(1,2,1,1,2,1,2,1,2,1)
Clicks <- c(10,11,12,13,14,15,14,13,12,11)
df <- data.frame(Brand,Category,Clicks)

|Brand | Category| Clicks|
|:-----|--------:|------:|
|A     |        1|     10|
|B     |        2|     11|
|C     |        1|     12|
|A     |        1|     13|
|A     |        2|     14|
|B     |        1|     15|
|A     |        2|     14|
|A     |        1|     13|
|B     |        2|     12|
|C     |        1|     11|
Run Code Online (Sandbox Code Playgroud)

这是我的预期输出.我想按计数过滤掉两个最大的品牌,然后找出每个品牌/类别组合的平均点击次数

|Brand | Category| mean_clicks|
|:-----|--------:|-----------:|
|A     |        1|        12.0|
|A     |        2|        14.0|
|B     |        1|        15.0|
|B     |        2| …
Run Code Online (Sandbox Code Playgroud)

r top-n dplyr

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

相当于purrr :: map中的`break`

假设我想运行一个循环,直到满足条件,此时保存结果并退出循环:

library(tidyverse)

for (i in 1:5) {

  df <- iris %>% select(i) %>% head(2)

  if (names(df) == "Petal.Width") {
    out <- df
    break 

  }
}

out
Run Code Online (Sandbox Code Playgroud)

如何在purr::map不评估每个i的情况下重写它?

执行以下操作会得到我需要的结果,但必须评估5次,而for循环只需3次:

fun <- function(x) {

  df <- iris %>% select(x) %>% head(2)

  if (names(df) == "Petal.Width") {
  return(df)
  }
}

map_df(1:5, fun)
Run Code Online (Sandbox Code Playgroud)

r dplyr purrr

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

dplyr:选择除vector中包含的变量之外的所有变量

这应该是一个简单的问题,但我正在努力.

我有一个变量名称向量,我想从数据框中排除:

df <- data.frame(matrix(rexp(50), nrow = 10, ncol = 5))
names(df) <- paste0(rep("variable_", 5), 1:5)

excluded_vars <- c("variable_1", "variable_3")
Run Code Online (Sandbox Code Playgroud)

我原本以为只要在select语句中排除对象-就可以了:

select(df, -excluded_vars)
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

-excluded_vars中的错误:一元运算符的参数无效

使用时也是如此 select_()

有任何想法吗?

select r dplyr

7
推荐指数
4
解决办法
1万
查看次数

使用 tidyr::separate 拆分多列的 Tidy 方法

我有一个像这样的数据框:

df <- structure(list(A = c("3 of 5", "1 of 2", "1 of 3", "1 of 3", 
"3 of 4", "2 of 7"), B = c("2 of 2", "2 of 4", "0 of 1", "0 of 0", 
"0 of 0", "0 of 0"), C = c("10 of 21", "3 of 14", "11 of 34", 
"10 of 35", "16 of 53", "17 of 62"), D = c("0 of 0", "0 of 0", 
"0 of 0", "0 of 0", "0 of 0", …
Run Code Online (Sandbox Code Playgroud)

r tidyr purrr

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

在建模之前减少因子水平的数量

我有一个 2600 级的因子,我想在建模之前将其减少到 ~10

我想我可以用一个操作来做到这一点,它说“如果一个因子被列出的次数少于 x 次,它应该被放入一个名为“其他”的桶中

以下是一些示例数据:

df <- data.frame(colour=c("blue","blue","blue","green","green","orange","grey"))
Run Code Online (Sandbox Code Playgroud)

这是我希望的输出:

  colour
1   blue
2   blue
3   blue
4  green
5  green
6  other
7  other
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

df %>% mutate(colour = ifelse(count(colour) < 2, 'other', colour))
Run Code Online (Sandbox Code Playgroud)

mutate_impl(.data, dots) 中的错误:评估错误:“组”没有适用的方法应用于“因子”类的对象。

r dplyr

5
推荐指数
2
解决办法
727
查看次数

使用 dplyr 组内的累积计数

我正在尝试创建一个包含另一列的累积计数的列。

我的数据:

df <- data.frame(brand = c("A","B","C","A","A","B","A","A","B","C"))
Run Code Online (Sandbox Code Playgroud)

这是我的预期输出:

    |Brand |  Count  |
    |:-----|--------:|
    |A     |        1|
    |B     |        1|
    |C     |        1|
    |A     |        2|
    |A     |        3|
    |B     |        2|
    |A     |        4|
    |A     |        5|
    |B     |        3|
    |C     |        2|
Run Code Online (Sandbox Code Playgroud)

我尝试过 cumsum 但它不接受字符串或因素:

df %>%
  group_by(Brand) %>%
  mutate(Count = cumsum(Brand))
Run Code Online (Sandbox Code Playgroud)

编辑:为了奖励积分,如果该解决方案也可以用于数据库表(SQL Server),那就太好了

r dplyr

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

检查 odbc 连接是打开还是关闭

我想编写一个运行以下操作的函数:“如果一个数据库连接已经打开,关闭它并重新打开一个新的”

为此,我需要一种方法来检查连接是否已打开

这是我的连接字符串:

library(odbc)

my_conn_string <- paste("Driver{Teradata};DBCName=teradata2690;DATABASE=PRODUCTION;UID=",
                            username,";PWD=",password, sep="")

t2690 <- dbConnect(odbc::odbc(), .connection_string=my_conn_string)
Run Code Online (Sandbox Code Playgroud)

我想过使用class连接的:

    if (is.null(class(t2690)) { 
t2690 <- dbConnect(odbc::odbc(), .connection_string=my_conn_string) 
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为无论连接是否打开,类都是相同的:

# Class when connected
class(t2690)

[1] "Teradata"
attr(,"package")
[1] ".GlobalEnv"

# Class when not connected
dbDisconnect(t2690)
class(t2690)

[1] "Teradata"
attr(,"package")
[1] ".GlobalEnv"
Run Code Online (Sandbox Code Playgroud)

database odbc database-connection r

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

标签 统计

r ×7

dplyr ×5

purrr ×2

database ×1

database-connection ×1

odbc ×1

select ×1

tidyr ×1

top-n ×1