小编J.S*_*ree的帖子

如何使用R dplyr的summary来计算符合条件的行数?

我有一个想要总结的数据集。首先,我想要主客场比赛的总和,这是我可以做到的。但是,我还想知道每个子类别(主场、客场)中有多少个异常值(定义为超过 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)

r subset counting dplyr summarize

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

仅当字符串在 R 中出现多次时,如何使用替换字符串的第一次出现?

我有一个看起来像这样的字符串:

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 gsub

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

如何在 R Shiny 中更改 DT Datable 标题的背景和文本颜色

我有一个数据表,我想在 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)

formatting r shiny dt htmlwidgets

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

在用户使用 Shinyauth 看到应用程序的任何部分之前,如何要求在 R Shiny 中进行用户身份验证?

我有一个 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 shiny shinydashboard shinyapps

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

为什么 parse_number 函数说我的字符向量不是字符?

我正在使用 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()。谁能解释一下为什么我会收到此错误以及如何修复它?

parsing r readr

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

轻松替换 R 中的多个单词;str_replace_all 给出两个对象长度不相等的错误

我正在尝试使用 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 行。我被困住了,试图找出为什么这不起作用和/或另一个不涉及在向量中输入每个字符元素的解决方案。

谢谢!

string r character substitution str-replace

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

将mutate_at用于满足两个条件的变量dplyr R

我正在尝试对数据框中的某些项目进行评分(重新编码)。所有反向得分的项目都以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")必须求值为列的位置或名称,而不是逻辑向量

有什么干净的方法可以让它一次对这几个变量执行反向计分?再一次,数据集太大,实际上一次只能选择单个变量。

谢谢!

select r dplyr recode mutate

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

为什么我的 R 与 rowSums 一起变异不起作用(错误:“mutate()”输入“..2”出现问题。x“x”必须是数字?输入“..2”是“rowSums(.)”。) ?

我正在尝试学习如何使用across()R 中的函数,并且我想用rowSums()它做一个简单的事情。但是,我不断收到此错误:

\n
\n

错误:mutate()输入有问题..2。x 'x' 必须是数字 \xe2\x84\xb9\n输入..2rowSums(., na.rm = TRUE)

\n
\n

然而,我所有相关的列都是数字。任何帮助任何解释我为什么会收到此错误的信息将不胜感激!

\n

这是一个可重现的示例:

\n
library(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))\n
Run Code Online (Sandbox Code Playgroud)\n

这就是我要去的原因

\n
answer <-  tibble(resource_name = c("Justin", "Corey", "Justin"),\n                  project = c("P1", "P2", …
Run Code Online (Sandbox Code Playgroud)

r rowsum dplyr across

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

在R中使用dplyr选择不以字符串开头的列

我想从小标题中选择以字母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反转它们,因此,一个整洁的解决方案是最好的。

谢谢!

select r startswith negate dplyr

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

在 r 中使用 rename_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 rename dplyr suffix tidyverse

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