gpt4 book ai didi

r - 创建一个新变量,它是一个变量以另外两个变量为条件的平均值(并维护数据集中的所有其他变量)

转载 作者:行者123 更新时间:2023-12-01 13:15:43 26 4
gpt4 key购买 nike

这是我正在处理的数据集中的一个(缩短的)样本。该示例表示来自具有 2 个 session (session_number) 的实验的数据,在每个 session 中,参与者完成了 5 次 (trial_number) 的手握练习(因此,总共 10 次; 2 * 5 = 10)。 5 次试验中的每一次都有 3 次握力观察(percent_of_maximum)。我想获得 10 次试验中每一次的这 3 次观察的平均值(在下文中,我称之为 mean_by_trial)。

最后,这就是我所坚持的,我想输出一个 20 行长的数据集(每个独特的试验一行,有 2 个参与者,每个参与者有 10 个试验;2 * 10 = 20 ), AND 保留所有其他变量。所有其他变量(示例中有:placebosupportpersonalityperceived_difficulty)将是对于每个唯一的 Participanttrial_numbersession_number 都是一样的(参见下面的示例数据集)。

我已经尝试使用 ddply,这正是我想要的,但是新数据集不包含数据集中的其他变量(仅 new_dat包含 trial_numbersession_numberParticipant 和新的 mean_by_trial 变量)。如何维护其他变量?

#create sample data frame
dat <- data.frame(
Participant = rep(1:2, each = 30),
placebo = c(replicate(15, "placebo"), replicate(15, "control"), replicate(15, "control"), replicate(15, "placebo")),
support = rep(sort(rep(c("support", "control"), 3)), 10),
personality = c(replicate(30, "nice"), replicate(30, "naughty")),
session_number = c(rep(1:2, each = 15), rep(1:2, each = 15)),
trial_number = c(rep(1:5, each = 3), rep(1:5, each = 3), rep(1:5, each = 3), rep(1:5, each = 3)),
percent_of_maximum = runif(60, min = 0, max = 100),
perceived_difficulty = runif(60, min = 50, max = 100)
)

#this is what I have tried so far
library(plyr)
new_dat <- ddply(dat, .(trial_number, session_number, Participant), summarise, mean_by_trial = mean(percent_of_maximum), .drop = FALSE)

我希望 new_dat 包含 dat 中的所有变量,加上 mean_by_trial 变量。谢谢!

最佳答案

我们可以使用mutate 而不是summarise 在数据集中创建一个列,然后执行slice

library(dplyr)
out <- ddply(dat, .(trial_number, session_number, Participant),
plyr::mutate, mean_by_trial = mean(percent_of_maximum), .drop = FALSE)
out %>%
group_by(trial_number, session_number, Participant) %>%
slice(1)

如果我们使用dplyr,那么这一切都可以在一个链中

newdat <- dat %>% 
group_by(trial_number, session_number, Participant) %>%
mutate(mean_by_trial = mean(percent_of_maximum)) %>%
slice(1)
head(newdat)
# A tibble: 6 x 9
# Groups: trial_number, session_number, Participant [6]
Participant placebo support personality session_number trial_number percent_of_maximum perceived_difficulty mean_by_trial
# <int> <fct> <fct> <fct> <int> <int> <dbl> <dbl> <dbl>
#1 1 placebo control nice 1 1 71.5 95.5 73.9
#2 2 control control naughty 1 1 38.9 63.8 67.7
#3 1 control support nice 2 1 97.1 54.2 68.4
#4 2 placebo support naughty 2 1 62.9 86.2 40.4
#5 1 placebo support nice 1 2 49.0 95.8 65.7
#6 2 control support naughty 1 2 80.9 74.6 68.3

关于r - 创建一个新变量,它是一个变量以另外两个变量为条件的平均值(并维护数据集中的所有其他变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55356474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com