R:构建一个循环函数以基于变量名/索引聚合变量

丽贝卡

我的数据具有以下结构。该数据集称为“ w12”。这只是数据的摘录。

ID   ###   w1_panas1   ###    w1_panas2  ###  w1_panas4

1    ########       5       ##########         3      ###########         2

2     ########        4         ##########       3     ###########         1

3       ########      3          ##########      2         ###########     4

使用函数为每个ID的三个项目(w1_panas1- w1_panas3的均值构建一个新变量

w12$w**1**_panas_host <- apply (cbind(w12$w**1**_panas1, w12$w**1**_panas2, w12$w**1**_panas3), 1, mean, na.rm= "T")

以上三个项目在12周内重复测量。在接下来的几周中,这些物品被命名为

w**2**_panas1, w2_pana**2**, w2_panas3
w**3**_panas1, w3_panas**2**, w3_panas3
...

并且结果变量应命名为

w**2**_panas
w**3**_panas

我不想写12次以上的函数,但想使用一个循环函数,该函数仅通过更改w1w2tow3即可自动构建变量w4

有人可以帮忙吗?

塔拉特

首先,一些测试数据:

set.seed(123)

df <- data.frame(ID = rep(1:3, each = 3),
                 w1_panas1 = runif(9),
                 w1_panas2 = runif(9),
                 w1_panas3 = runif(9),
                 w2_panas1 = runif(9),
                 w2_panas2 = runif(9),
                 w2_panas3 = runif(9),
                 w3_panas1 = runif(9),
                 w3_panas2 = runif(9),
                 w3_panas3 = runif(9))
df
#  ID w1_panas1  w1_panas2 w1_panas3  w2_panas1 w2_panas2  w2_panas3  w3_panas1 w3_panas2    w3_panas3
#1  1 0.2875775 0.45661474 0.3279207 0.59414202 0.7584595 0.13880606 0.56094798 0.2743836 0.7101824014
#2  1 0.7883051 0.95683335 0.9545036 0.28915974 0.2164079 0.23303410 0.20653139 0.8146400 0.0006247733
#3  1 0.4089769 0.45333416 0.8895393 0.14711365 0.3181810 0.46596245 0.12753165 0.4485163 0.4753165741
#4  2 0.8830174 0.67757064 0.6928034 0.96302423 0.2316258 0.26597264 0.75330786 0.8100644 0.2201188852
#5  2 0.9404673 0.57263340 0.6405068 0.90229905 0.1428000 0.85782772 0.89504536 0.8123895 0.3798165377
#6  2 0.0455565 0.10292468 0.9942698 0.69070528 0.4145463 0.04583117 0.37446278 0.7943423 0.6127710033
#7  3 0.5281055 0.89982497 0.6557058 0.79546742 0.4137243 0.44220007 0.66511519 0.4398317 0.3517979092
#8  3 0.8924190 0.24608773 0.7085305 0.02461368 0.3688455 0.79892485 0.09484066 0.7544752 0.1111354243
#9  3 0.5514350 0.04205953 0.5440660 0.47779597 0.1524447 0.12189926 0.38396964 0.6292211 0.2436194727

现在使用dplyr和tidyr进行操作:

library(dplyr)      # load the 
library(tidyr)      # required packages

df <- df %>% 
  group_by(ID) %>%                  # group the data by ID
  mutate(n = row_number()) %>%      # for each ID, create and index n
  ungroup()                         # ungroup the data

df %>% 
  gather(panas, value, -c(ID, n)) %>%                         # reshape the data to long format
  separate(panas, into = c("week", "number"), sep = "_") %>%  # split the column "panas" into two columns based on the "_" 
  group_by(ID, week, n) %>%                                   # group the data
  summarise(mean = mean(value)) %>%                           # calculate mean values for each group
  ungroup() %>%                                               # ungroup..
  spread(week, mean) %>%                                      # reshape from long to wide format
  left_join(df, ., by = c("ID", "n")) %>%                     # perform a join with the original data by ID and n so that all data is in one table
  select(-n)                                                  # drop column "n"

结果是(请注意最后3列w1,w2,w3,它们显示了所需的平均值):

#Source: local data frame [9 x 13]
#
#  ID w1_panas1  w1_panas2 w1_panas3  w2_panas1 w2_panas2  w2_panas3  w3_panas1 w3_panas2    w3_panas3        w1        w2        w3
#1  1 0.2875775 0.45661474 0.3279207 0.59414202 0.7584595 0.13880606 0.56094798 0.2743836 0.7101824014 0.3573710 0.4971359 0.5151713
#2  1 0.7883051 0.95683335 0.9545036 0.28915974 0.2164079 0.23303410 0.20653139 0.8146400 0.0006247733 0.8998807 0.2462006 0.3405987
#3  1 0.4089769 0.45333416 0.8895393 0.14711365 0.3181810 0.46596245 0.12753165 0.4485163 0.4753165741 0.5839501 0.3104190 0.3504549
#4  2 0.8830174 0.67757064 0.6928034 0.96302423 0.2316258 0.26597264 0.75330786 0.8100644 0.2201188852 0.7511305 0.4868742 0.5944970
#5  2 0.9404673 0.57263340 0.6405068 0.90229905 0.1428000 0.85782772 0.89504536 0.8123895 0.3798165377 0.7178692 0.6343089 0.6957505
#6  2 0.0455565 0.10292468 0.9942698 0.69070528 0.4145463 0.04583117 0.37446278 0.7943423 0.6127710033 0.3809170 0.3836943 0.5938587
#7  3 0.5281055 0.89982497 0.6557058 0.79546742 0.4137243 0.44220007 0.66511519 0.4398317 0.3517979092 0.6945454 0.5504639 0.4855816
#8  3 0.8924190 0.24608773 0.7085305 0.02461368 0.3688455 0.79892485 0.09484066 0.7544752 0.1111354243 0.6156791 0.3974613 0.3201504
#9  3 0.5514350 0.04205953 0.5440660 0.47779597 0.1524447 0.12189926 0.38396964 0.6292211 0.2436194727 0.3791869 0.2507133 0.4189367

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

要构建一个for循环,如何在count()命令中使用变量名?

循环一个UIElement变量名

在bash脚本中基于另一个变量名创建对变量的引用?

将for循环的变量插入另一个变量名

R:表的参数是一个包含变量名的变量,但不是这样解释的?

将变量中的第一个值作为 R 中的变量名

如何在变量名中集成一个不断变化的索引?

使用变量名来更改另一个变量名的名称

如何随机生成一个变量名?

查找最后一个整数并返回变量名

打开一个包含变量名的文件

将参数传递给函数以创建变量名

bash:创建一个包含另一个变量的变量名

带变量名的r中的for循环

循环保持变量名R

R:循环显示变量名的问题

R - 循环中的变量名

变量扩展的问题。获取一个变量到变量名中echo

Python-Scrapy:通过另一个函数产生一个定义在一个函数中的变量名

编写自定义函数以基于另一个表转换数据框中的变量类

如何定义一个调用ggplot2函数并在其参数中使用变量名的函数?

在函数 R 中粘贴变量名

尝试使R函数检索变量名

如何使用循环索引引用变量名并创建新的变量名?

基于 R 中某些变量的相似值构建一个伪面板

如何组合一个静态字符串和一个变量名来创建一个定义的变量名?

dplyr在一个函数中联接两个表,其中一个变量名是该函数的参数

使用for循环返回变量名-R中的变量均值

返回一个全局变量,使用字符串作为变量名