我想根据计数过滤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) 假设我想运行一个循环,直到满足条件,此时保存结果并退出循环:
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) 这应该是一个简单的问题,但我正在努力.
我有一个变量名称向量,我想从数据框中排除:
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_()
有任何想法吗?
我有一个像这样的数据框:
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) 我有一个 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) 中的错误:评估错误:“组”没有适用的方法应用于“因子”类的对象。
我正在尝试创建一个包含另一列的累积计数的列。
我的数据:
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),那就太好了
我想编写一个运行以下操作的函数:“如果一个数据库连接已经打开,关闭它并重新打开一个新的”
为此,我需要一种方法来检查连接是否已打开
这是我的连接字符串:
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)