0

我是 dplyr 的新手,我在 (i) 理解它的语法和 (ii) 将其旧版本代码转换为我可以在其最新版本 (dplyr 1.0.2) 中使用的代码方面遇到了困难。特别是,我对以下两行代码感到困惑:

mutate_each(funs(replace(.,.=="NOT ANSWERED",NA))) %>%     
mutate_each(funs(ordered(.,c("NOT AT ALL","ONCE A WEEK", "2-4 TIMES PER WEEK/HALF THE TIME", "5 OR MORE TIMES PER WEEK/ALMOST ALWAYS"))))

我认为第一行代码应该用 NA 替换所有“未回答”。

你认为下面的变换合适吗?

mutate(across(everything(),~replace(., .== "NOT ANSWERED", NA)))

但是,我不明白第二行代码是关于什么的。我相信这是关于创建某种有序变量,其中“完全没有”、“每周一次”、“每周 2-4 次/一半时间”和“每周 5 次或更多次/几乎总是”作为级别.

您对这一行的作用以及如何使用 mutate(across()) 将其转换为新语法有什么建议吗?

一些上下文

我正在尝试遵循有关如何使用 Bootnet R 包的教程。以下文字来自教程第一部分

要下载数据集,请访问: https ://datashare.nida.nih.gov/study/nida-ctn-0015并单击“CTN-0015 数据文件”。相关数据文件称为“qs.csv”,可以使用默认的 read.csv 函数将其加载到 R 中:

FullData <- read.csv("qs.csv", stringsAsFactors = FALSE)

这会以长格式加载数据,其中包含带有主题 ID 的列、带有管理项目名称的列以及包含项目响应的第三列。对于网络分析,我们需要数据是宽格式的。此外,我们需要指定响应“NOT ANSWERED”表示缺少响应,而其他响应是有序的。最后,我们需要在 PTSD 症状频率评分的基线测量中提取相关数据集。为此,我们可以使用 dplyr 和 tidyr R 包,如下所示:

# Load packages: 
library("dplyr") 
library("tidyr") 

# Frequency at baseline: 
Data <- FullData %>% 
        filter(EPOCH == "BASELINE",grepl("^PSSR\\d+A$",QSTESTCD)) %>% 
        select(USUBJID,QSTEST,QSORRES) %>% 
        spread(QSTEST, QSORRES) %>% 
        select(-USUBJID) %
        mutate_each(funs(replace(.,.=="NOT ANSWERED",NA))) %>% 
        mutate_each(funs(ordered(.,c("NOT AT ALL","ONCE A WEEK", "2-4 TIMES PER WEEK/HALF THE TIME", "5 OR MORE TIMES PER WEEK/ALMOST ALWAYS"))))

names(Data) <- seq_len(ncol(Data))

本教程的第二部分继续进行。

4

1 回答 1

3

ordered用于按照呈现的顺序创建有序因子。由于这两个调用都应用于相同的列,因此您可以将它们组合成一个函数。尝试 :

library(dplyr)

vals <- c("NOT AT ALL","ONCE A WEEK", "2-4 TIMES PER WEEK/HALF THE TIME", "5 OR MORE TIMES PER WEEK/ALMOST ALWAYS")

Data <- FullData %>%
          #....
          #....
          #....
          mutate(across(.fns = ~ordered(replace(., .== "NOT ANSWERED", NA), vals)))
于 2021-02-04T11:30:55.487 回答