我有一个想要总结的数据集。首先,我想要主客场比赛的总和,这是我可以做到的。但是,我还想知道每个子类别(主场、客场)中有多少个异常值(定义为超过 300 分)。
如果我没有使用summary,我知道dplyr有这个count()功能,但我希望这个解决方案出现在我的summarize()通话中。这是我所拥有的和我尝试过的但未能执行的内容:
#Test data
library(dplyr)
test <- tibble(score = c(100, 150, 200, 301, 150, 345, 102, 131),
location = c("home", "away", "home", "away", "home", "away", "home", "away"),
more_than_300 = c(FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE))
#attempt 1, count rows that match a criteria
test %>%
group_by(location) %>%
summarize(total_score = sum(score),
n_outliers = nrow(.[more_than_300 == FALSE]))
Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的字符串:
problem <- c("GROUP 1", "GROUP 1 & GROUP 2", "GROUP 1 & GROUP 2 & GROUP 3", "GROUP 1 & GROUP 2 & GROUP 3 & GROUP 4")
Run Code Online (Sandbox Code Playgroud)
每组之间有“&”。当存在多个“&”时,我想使用 R(或者包sub()中的某些东西)将每个“&”替换为“,”。stringr但是,我不想改变最后的“&”。我该怎么做,它看起来像:
#Note: Only the 3rd and 4th strings should be changed
solution <- c("GROUP 1", "GROUP 1 & GROUP 2", "GROUP 1, GROUP 2 & GROUP 3", "GROUP 1, GROUP 2, GROUP 3 & GROUP 4")
Run Code Online (Sandbox Code Playgroud)
在实际的字符串中,可能有无限数量的“&”,所以如果可能的话,我不想硬编码限制。
我有一个数据表,我想在 R Shiny 中显示,但我希望标题列的列名称为红色,文本为白色。使用 formatStyles(),我只能指定整个列,而不仅仅是标题名称行。您建议如何解决这个问题?
library(shiny)
library(dplyr)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
),
mainPanel(
DT::DTOutput("table")
)
))
server <- function(input, output) {
data <- tibble(name = c("Justin", "Corey", "Sibley"),
grade = c(50, 100, 100))
output$table <- renderDT({
datatable(data)
})
}
# Run the application
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud) 我有一个 R Shiny 应用程序,我希望用户在看到任何东西之前进行身份验证,包括主面板和每个选项卡。我知道我可以req(credentials()$user_auth)在每个项目之前使用“ ”,但这对我的主面板来说似乎有点过分。但是,如果我不这样做,它看起来很尴尬:
我怎样才能在用户看到任何东西之前要求凭据?有没有办法只指定一次 above-req() 参数?
我知道shinymanager可以通过 secureapp() 函数做到这一点,但据我所知,您不能使用散列密码。我的应用程序使用sodium 包来散列密码,因此最好使用shinyauhr,因为它可以轻松解码。仅当他们可以使用散列密码时才对其他解决方案开放。
这是一个可重现的示例:
library(shiny)
library(shinyauthr)
user_base <- tibble::tibble(
user = c("user1", "user2"),
permissions = c("admin", "standard"),
name = c("User One", "User Two"),
pwd_col = "password"
)
ui <- fluidPage(
# add logout button UI
div(class = "pull-right", shinyauthr::logoutUI(id = "logout")),
# add login panel UI function
shinyauthr::loginUI(id = "login"),
tabsetPanel(
tabPanel("View 1",
h4("Select Your Desired Filters"),
div(id = "inputs",
dateRangeInput(
inputId = "date_filter",
label …Run Code Online (Sandbox Code Playgroud) 我正在使用 R 从 id 字符串中提取数字。过去,我使用过 readr 的 parse_number() 函数,但最近,我收到一个奇怪的错误,它说我的字符列不是字符:
library(dplyr)
library(readr)
test <- tibble(id_numbers = c("ICKLSD5", "DFTEM4", "DPDFE45"))
test %>%
parse_number(id_numbers)
Error in parse_vector(x, col_number(), na = na, locale = locale, trim_ws = trim_ws) :
is.character(x) is not TRUE
Run Code Online (Sandbox Code Playgroud)
但是,该列显然是一个字符向量:
#Yields true
is.character(test$id_numbers)
Run Code Online (Sandbox Code Playgroud)
而且,即使将列包装在 as.character 中仍然会出现相同的错误:
test %>%
parse_number(as.character(id_numbers))
Run Code Online (Sandbox Code Playgroud)
我知道还有其他函数的其他解决方法,但我真的想使用 parse_number()。谁能解释一下为什么我会收到此错误以及如何修复它?
我正在尝试使用 str_replace_all 将许多不同的值(即“Mod”、“M2”、“M3”、“Interviewer”)替换为一个一致的字符串(即“Moderator:”)。我正在对多个不同的类别进行此操作,并且我希望避免将每个唯一值都写出来,因为有很多。
因此,我制作了一个包含所有我想要标准化的唯一值的小标题并读取它,然后拉出每列(为了简单起见,只有 5 个,但只显示了 2 个)以将它们变成向量:
speak_names <- read_csv("speak_names.csv")
speak_namesMisc <- dplyr::pull(speak_names, Misc)
speak_namesMod <- dplyr::pull(speak_names, Moderator)
Run Code Online (Sandbox Code Playgroud)
对于替换值,我制作了一个与上述向量等长的字符向量,因为我知道替换和模式必须是等长的:
Misc <- rep("Misc:", 2)
Mod <- rep("Moderator:", 28)
Run Code Online (Sandbox Code Playgroud)
当我使用此代码运行 Misc 时,它工作得很好:
atas_clean$speaker <- str_replace_all(atas_clean$speaker, speak_namesMisc, Misc)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试相同的版主版本时(即使我尝试在 Misc 之前运行它),我收到一条错误消息:
atas_clean$speaker <- str_replace_all(atas_clean$speaker, speak_namesMod,
Mod)
Warning message:
In stri_replace_all_regex(string, pattern, fix_replacement(replacement), :
longer object length is not a multiple of shorter object length
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我会收到这个错误,因为这个相同的函数产生 TRUE:
identical(length(speak_namesMod), length(Mod))
Run Code Online (Sandbox Code Playgroud)
如果这对模式或替换有任何影响,我正在使用的数据框的长度为 16,244 行。我被困住了,试图找出为什么这不起作用和/或另一个不涉及在向量中输入每个字符元素的解决方案。
谢谢!
我正在尝试对数据框中的某些项目进行评分(重新编码)。所有反向得分的项目都以R结尾,并且每个音阶都有一个唯一的开始(“ hc”,“ out”和“ hm”)。我通常只选择所有以“ r”结尾的变量,但是问题是有些标度为5点标度(“ hc”和“ out”),而其他标度为7点标度(“ hm” ”)。
这是更大得多的数据集的示例:
library(tidyverse)
data <- tibble(name = c("Mike", "Ray", "Hassan"),
hc_1 = c(1, 2, 3),
hc_2r = c(5, 5, 4),
out_1r = c(5, 4, 2),
out_2 = c(2, 4, 5),
out_3r = c(2, 2, 1),
hm_1 = c(6, 7, 7),
hm_2r = c(7, 1, 7))
Run Code Online (Sandbox Code Playgroud)
假设我想一次做一个标度,所以我从hm开始,它是七点标度。
我想用&语句尝试类似的操作,但出现错误:
library(tidyverse)
library(car)
data %>%
mutate_at(vars(ends_with("r") & starts_with("hm")), ~(recode(., "1=7; 2=6; 3=5; 4=4; 5=3; 6=2; 7=1")))
Run Code Online (Sandbox Code Playgroud)
错误:
ends_with("r") & starts_with("hc")必须求值为列的位置或名称,而不是逻辑向量
有什么干净的方法可以让它一次对这几个变量执行反向计分?再一次,数据集太大,实际上一次只能选择单个变量。
谢谢!
我正在尝试学习如何使用across()R 中的函数,并且我想用rowSums()它做一个简单的事情。但是,我不断收到此错误:
\n\n错误:
\nmutate()输入有问题..2。x 'x' 必须是数字 \xe2\x84\xb9\n输入..2为rowSums(., na.rm = TRUE)。
然而,我所有相关的列都是数字。任何帮助任何解释我为什么会收到此错误的信息将不胜感激!
\n这是一个可重现的示例:
\nlibrary(dplyr)\ntest <- tibble(resource_name = c("Justin", "Corey", "Justin"),\n project = c("P1", "P2", "P3"),\n sep_2021 = c(1, 2, NA),\n oct_2021 = c(5, 2, 1))\n\n\ntest %>%\n select(resource_name, project, sep_2021, oct_2021) %>%\n mutate(total = across(contains("_20")), rowSums(., na.rm = TRUE))\nRun Code Online (Sandbox Code Playgroud)\n这就是我要去的原因
\nanswer <- tibble(resource_name = c("Justin", "Corey", "Justin"),\n project = c("P1", "P2", …Run Code Online (Sandbox Code Playgroud) 我想从小标题中选择以字母R结尾且不以字符串(“ hc”)开头的列。例如,如果我有一个看起来像这样的数据框:
name hc_1 hc_2 hc_3r hc_4r lw_1r lw_2 lw_3r lw_4
Joe 1 2 3 2 1 5 2 2
Barb 5 4 3 3 2 3 3 1
Run Code Online (Sandbox Code Playgroud)
为了做我想做的事,我尝试了很多选择,但是令我惊讶的是这个选择不起作用:
library(tidyverse)
data %>%
select(ends_with("r"), !starts_with("hc"))
Run Code Online (Sandbox Code Playgroud)
尝试时,出现以下错误:
错误:
!starts_with("hc")必须求值为列的位置或名称,而不是逻辑向量
我也尝试过使用negate()并得到相同的错误。
library(tidyverse)
data %>%
select(ends_with("r"), negate(starts_with("hc")))
Run Code Online (Sandbox Code Playgroud)
错误:
negate(starts_with("hc"))必须求值到列的位置或名称,而不是函数
我想将答案保留在dplyr select函数中,因为一旦选择了变量,我将最终使用mutate_at反转它们,因此,一个整洁的解决方案是最好的。
谢谢!
我有一个数据框,其中许多列以相同的后缀结尾,我想使用 rename_at() 将它们全部删除,但我无法弄清楚。
library(tidyverse)
my_df <- tibble(id = c(1, 2),
jan_real = c(8, 10),
feb_real = c(9, 10),
mar_real = c(1, 11))
desired_df <- tibble(id = c(1, 2),
jan = c(8, 10),
feb = c(9, 10),
mar = c(1, 11))
Run Code Online (Sandbox Code Playgroud) r ×10
dplyr ×5
select ×2
shiny ×2
across ×1
character ×1
counting ×1
dt ×1
formatting ×1
gsub ×1
htmlwidgets ×1
mutate ×1
negate ×1
parsing ×1
readr ×1
recode ×1
rename ×1
rowsum ×1
shinyapps ×1
startswith ×1
str-replace ×1
string ×1
subset ×1
substitution ×1
suffix ×1
summarize ×1
tidyverse ×1