如何在循环函数(大数据集)中使用 rowMeans 函数计算项目中的新变量?

问题描述 投票:0回答:1

我需要你的帮助,因为我有一个关于疾病的大数据集(宽格式)。因此,我有 54 种不同的疾病,每种疾病都有 18 个问题(数据嵌套在疾病和参与者中)。

由于每种疾病我都有相同的变量/问题,因此我正在尝试找到一种快速方法来计算量表的 rowMeans(可能使用循环函数)。

所以基本上我有变量

epi_scm.1 - epi_scm.18, ms_scm.1-ms_scm.18, autism_scm.1-autism_scm.18
等(列名的开头表示疾病,结束表示多项),我需要计算每种疾病的多项的 rowMeans (例如,
Morality = rowMeans([, c("epi_scm.1","epi_scm.2", etc.)]
但我不想针对每种疾病手动执行此操作(因为有很多疾病)。

您知道如何更有效地做到这一点吗? (希望你明白我的意思)

谢谢并致以诚挚的问候!

L

我尝试对每种疾病进行子集化,但这需要太多时间,而且并不适合我的主要分析:

#Subset data to include only 42 columns

subset_epi <- df4[, 1:42]  # Replace 1:42 with the indices or column names of the columns I want to keep
subset_epi <- subset_epi[complete.cases(subset_epi), ]

#Organize index numbers subset

rownames(subset_epi) <- 1:nrow(subset_epi)
dim(subset_epi)

#New variable Morality = Mean Score for Morality

subset_epi$Morality <- rowMeans(na.omit(subset_epi[, c("epi_scm_1", "epi_scm_2", "epi_scm_3", "epi_scm_4", "epi_scm_5")]))
r loops bigdata calculated-columns survey
1个回答
0
投票

这是您可以尝试的示例方法。

library(tidyverse)

# Mocking up some data:
df <- data.frame(participant = 1:4,
                 epi_scm_1 = sample(1:5, 4, TRUE),
                 epi_scm_2 = sample(1:5, 4, TRUE),
                 epi_scm_3 = sample(1:5, 4, TRUE),
                 autism_scm_1 = sample(1:5, 4, TRUE),
                 autism_scm_2 = sample(1:5, 4, TRUE),
                 autism_scm_3 = sample(1:5, 4, TRUE)
                 )

# pivoting longer:
df2 <- df |> pivot_longer(-participant,
                   names_to = c("illness", NA, "question_no"),
                   names_sep = "_",
                   values_to = "score")

df2 看起来像:

# A tibble: 24 × 4
   participant illness question_no score
         <int> <chr>   <chr>       <int>
 1           1 epi     1               5
 2           1 epi     2               1
 3           1 epi     3               5
 4           1 autism  1               2
 5           1 autism  2               1
 6           1 autism  3               3
 7           2 epi     1               1
 8           2 epi     2               1
 9           2 epi     3               3
10           2 autism  1               4
etc

然后我们想通过取每个参与者和每种疾病的分数的平均值来进行总结:

> df2 |> summarise(mean = mean(score), .by = c(participant, illness))
# A tibble: 8 × 3
  participant illness  mean
        <int> <chr>   <dbl>
1           1 epi      3.67
2           1 autism   2   
3           2 epi      1.67
4           2 autism   2.33
5           3 epi      4   
6           3 autism   1   
7           4 epi      1.67
8           4 autism   2.33

© www.soinside.com 2019 - 2024. All rights reserved.