小编Mos*_*ses的帖子

有没有办法根据条件将相关变量折叠成一个?

比方说,我有多个变量衡量物质滥用即A1是alcohal使用A2是bhangA3是可卡因。我想生成变量afin如果三者中的任何一个是肯定的,表明参与药物滥用的。

有没有办法缩短代码,所以我不指定使用多个ifelse语句,如下所示?试图找到最好的方法来做到这一点,因为我有 10 多个变量可以合并为一个,而写作ifelse可能并不理想。

# Anymatch
library(tidyverse)

set.seed(2021)

mydata <- tibble(
  a1 = factor(round(runif(20, 1, 3)),
              labels = c("Yes", "No", "N/A")),
  a2 = factor(round(runif(20, 1, 3)),
              labels = c("Yes", "No", "N/A")),
  a3 = factor(round(runif(20, 1, 3)),
              labels = c("Yes", "No", "N/A")),
  b1 = round(rnorm(20, 10, 2)))
mydata

mydata <- mydata %>%
  mutate(afin = ifelse(a1 == "Yes"|a2=="Yes"|a3=="Yes", "Yes", "No"))

Run Code Online (Sandbox Code Playgroud)

r dplyr

6
推荐指数
2
解决办法
50
查看次数

有没有办法列出 dplyr 中 na_if 函数中的值?

我想列出小标题中所有出现的情况,我想使用na_ifdplyr 包中的函数将其转换为缺失,但我似乎没有得到正确的结果。有线索吗?

library(dplyr)

set.seed(123)

df <- tibble(
  a1 = c("one", "three", "97", "twenty", "98"),
  a2 = c("R", "Python", "99", "Java", "97"),
  a3 = c("statistics", "Data", "Programming", "99", "Science"),
  a4 = floor(rnorm(5, 80, 2))
)

#--- The long route

df1 <- df %>%
  mutate(across(where(is.character), ~na_if(., "97")),
         across(where(is.character), ~na_if(., "98")),
         across(where(is.character), ~na_if(., "99")))

#---- Trial

df2 <- df %>%
  mutate(across(where(is.character),
                ~na_if(., c("97", "98", "99"))))
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

将特定变量名称提取到单个变量中

我会在每行中挑选出带有 ## 的任何变量,然后将这些变量存储在 vars_extract 变量中。任何想法?

library(tidyverse)

df <- tibble(
  "a1" = c("##", 3, NA, 4, 5),
  "a2" = c(10, 38, "##", 4, 5),
  "a3" = c(11, 34, NA, 4, 5),
  "a4" = c("##", 35, 67, 4, "##"),
  "fname" = c("Megan", "John", "Terry", "Kim", "Anne")
)

# Trial (though not modified)
df %>%
  mutate(vars_extract = names(.))
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西

对于安妮,我将 vars_extract 设置为“a1,a4”

r tidyverse

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

删除 gtsummary 中的特定脚注

如何删除 gtsummary 表中的特定脚注。例如,我想删除脚注2 Wilcoxon rank sum test; Pearson's Chi-squared test但保留另一个。

library(gtsummary)
library(dplyr)

trial[c("age", "grade", "trt")] %>%
  tbl_summary(by = trt, missing = "no") %>%
  add_p()

Run Code Online (Sandbox Code Playgroud)

r gtsummary

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

过滤 R 中的任何缺失值

我一直在尝试使用 dplyr 过滤 R 中的任何缺失值,但我似乎没有得到正确的结果。任何领导将不胜感激。

library(dplyr)
library(tibble)

set.seed(2021)
testdata <- tibble(
  a1 = c(10, 12, NA, 10, 13),
  a2 = c("Test", "Test1", "Test 2", NA, NA),
  a3 = c(NA, "Test 10", "Test 2", NA, "Test 4"),
  a4 = rbinom(5, 10, 0.5)
)

testdata2 <- testdata %>% 
  filter(across(.cols = everything(), ~any_vars(is.na(.))))

Run Code Online (Sandbox Code Playgroud)

r dplyr

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

有没有办法对 R 中 prop.table 函数的结果进行四舍五入?

我想将 prop.table 的结果四舍五入到小数点后一位,但它似乎没有按预期工作。有线索吗?

data(mtcars)

with(mtcars, table(vs, am)) |> prop.table(margin = 1) * 100 |> round()
Run Code Online (Sandbox Code Playgroud)

r

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

有没有办法在合并函数中使用向量?

我想在 R 中将许多变量合并在一起。我已将它们提取到一个向量中,以便在合并函数中使用它们。在函数中键入它们中的每一个有点乏味。有办法吗?

library(dplyr)

set.seed(123)

df <- data.frame(
  var1 = sample(c(NA, 1, 3), 10, replace = T),
  var2 = sample(c(NA, 1, 3), 10, replace = T),
  var3 = sample(c(NA, 1, 3), 10, replace = T),
  var4 = sample(c(NA, 1, 3), 10, replace = T),
  age = floor(rnorm(10, 15, 2)),
  gender = factor(round(runif(10, 1, 2)),
              labels = c("Male", "Female"))
)

# Desired variables

myvars <- df %>% select(contains("var")) %>% names()


df_new <- df %>%
  mutate(finalvar = coalesce(myvars))

Run Code Online (Sandbox Code Playgroud)

r dplyr

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

有没有办法创建一个在 mutate isside %&gt;% 内部使用的函数

这就是我想要实现的目标。创建一个可以与许多变量一起重用的函数。

library(dplyr)

set.seed(2022)
mydata <- tibble::tibble(
  "id" = 1:100,
  "a1" = sample(c(rep("Yes", 40), rep_len(NA, 100)), 100),
  "a2" = sample(c(rep("Yes", 50), rep_len(NA, 100)), 100),
  "a3" = sample(c(rep("Yes", 40), rep_len(NA, 100)), 100),
  "a4" = sample(c(rep("Yes", 50), rep_len(NA, 100)), 100),
  "b2" = rnorm(100, 50, 10)
)

#  Goal is to capture any occurrence of non missing for (a* variables)


avars <- paste0("a", 1:4)

mydata %>%
  mutate(afin = ifelse(rowSums(!is.na(select(., all_of(avars))))>1, "Yes", "No")) %>%
  count(afin)

# Function (Does not work)

anymatch <- function(vars){
  ifelse(rowSums(!is.na(select(., all_of(vars))))>=1, …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

Using mutate with multiple functions

I am trying to provide two functions inside the mutate(across(where(is.factor))) to order the factor levels and drop unused levels. The code appears not to be working as expected. Where might have gone wrong?

#---- Libraries ----

library(tidyverse)

#---- Data ----

set.seed(2021)

df <- tibble(
  a1 = factor(ifelse(sign(rnorm(30))==-1, 0, 1), labels = c("No", "Yes")),
  a2 = factor(ifelse(sign(rnorm(30))==-1, 0, 1), labels = c("No", "Yes")),
  gender = gl(2, 15, labels = c("Males", "Females")),
  b2 = gl(3, 10, labels = c("Primary", "Secondary", "Tertiary", "Unknown")), …
Run Code Online (Sandbox Code Playgroud)

r tidyverse mutate across

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

标签 统计

r ×9

dplyr ×5

tidyverse ×2

across ×1

gtsummary ×1

mutate ×1