比方说,我有多个变量衡量物质滥用即A1是alcohal使用, A2是bhang和A3是可卡因。我想生成变量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) 我想列出小标题中所有出现的情况,我想使用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) 我会在每行中挑选出带有 ## 的任何变量,然后将这些变量存储在 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”
如何删除 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) 我一直在尝试使用 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) 我想将 prop.table 的结果四舍五入到小数点后一位,但它似乎没有按预期工作。有线索吗?
data(mtcars)
with(mtcars, table(vs, am)) |> prop.table(margin = 1) * 100 |> round()
Run Code Online (Sandbox Code Playgroud) 我想在 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) 这就是我想要实现的目标。创建一个可以与许多变量一起重用的函数。
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) 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)