gpt4 book ai didi

R:编写for循环计算差值并存储在新变量中

转载 作者:行者123 更新时间:2023-12-01 09:47:21 26 4
gpt4 key购买 nike

我已经查看了有关此主题的不同问题,但到目前为止,没有一个问题能帮助我获得我想要的。

我有一个数据框,有两个变量(standardized_'testname')和'predicted_standardized_'testname')。现在,我想计算两者之间的差异并将其存储在名为“testname”_finalscore 的新变量中。

由于我有大约 19 种不同的测试,我想在 R 中使用 for 循环来执行此操作 - 但我是编写此类循环的新手,而且我被卡住了。

我有一个测试列表,其中包含所有单独测试的名称:

testlist <- c("vlgt_ltfr", "vlgt_recog", 
"vlgt_imrec", "wms_imrec",
"wms_delrec", "fluency_dier",
"fluency_beroep", "tapdom",
"tapndom", "traila", "trailb",
"erik_congruent", "erik_percincong",
"erik_incongruent", "stroop_baseline",
"stroop_interference", "subrs", "tmt_interference")

为此,我编写了一个循环来计算标准化分数和预测标准化分数。

示例:

for( test in testlist){
patdat[,paste0('standardized_',test)] <- (patdat[,test] - tempmean) / tempsd
patdat[,paste0('predicted_standardized_',test)] <- coef(mymod)[1] + coef(mymod)[2]*patdat[,'p_age'] + coef(mymod)[3]*patdat[,'nlviq']

}

在此之后,我创建了不同的循环(不起作用),在其中我尝试计算差异并将其存储在一个新变量中:

for( test in testlist){
normdata[,paste0(test,'_finalscore')] <- (normdata[,paste0('standardized_', test)] - normdata[,paste0('predicted_standardized_', test)])
}

for(test in testlist){
normdata[,paste0(test, '_finalscore')] <- normdata[get('standardized_',test)] - normdata[get('predicted_standardized_'), test]
}

for(test in testlist){
normdata[,paste0(test, '_finalscore')] <- (normdata['standardized_',test] - normdata['predicted_standardized_', test])
}

我确实得到了一个带有“testname”_finalscore 的变量,但它是空的。我认为我索引错误,可能有一个函数可以用来解决这个问题——但我还没有找到它。

数据示例

> normdata$standardized_subrs
[1] -0.45551 0.61058 0.18414 0.18414 -0.13568 -1.30838 0.39736
[8] 0.71719 -0.13568 -0.13568 0.29075 0.18414 1.99649 -1.62821

> normdata$predicted_standardized_subrs
[1] -0.458274 0.174143 -0.492066 -0.414063 0.081612 0.488208
[7] 0.399994 0.416249 -0.113008 -0.398671 0.943571 0.316543

我想要得到的是一个看起来像这样的变量“subrs_finalscore”,但是对于测试列表中的所有测试:

> normdata$standardized_subrs - normdata$predicted_standardized_subrs
[1] 0.002764 0.436435 0.676208 0.598205 -0.217296 -1.796589
[7] -0.002633 0.300938 -0.022676 0.262987 -0.652819 -0.132400

提前致谢。

最佳答案

对于每个测试,我们的数据框中都有 standardizedpredicted_standardized 列。这是一种难以使用的形式来获得问题的答案。

我们要计算两个数字之间的差值并存储它。如果数据看起来像这样会怎样:

TestName Standardized Predicted
subrs -0.45551 -0.458274
subrs 0.61058 0.174143
subrs 0.18414 -0.492066
...

我们没有以多列(每个测试两列)的宽格式存储数据,而是以只有三列的长格式存储数据:测试名称、标准化值和预测值。这称为 tidying 数据,或将其放入 tidy 格式。

如果我们在名为 tidy_data 的帧中有 tidy 格式的数据,那么计算差异就像...一样简单

library(tidyverse)
tidy_data %>% mutate(FinalScore = Predicted - Standardized)

mutate 将新列添加到具有计算值的框架。

那么我们如何以tidy形式得到它呢?这是一个小工作,但如果我们采用原始的宽数据框并像这样更改它......

tidy_data = data %>%
mutate(row_num = row_number()) %>%
gather(key, value, -row_num) %>%
mutate(IsPredicted = ifelse(grepl("predicted", key), "Predicted", "Standardized"),
TestName = gsub("predicted_standardized_|standardized_", "", key)) %>%
select(TestName, IsPredicted, value, row_num) %>%
spread(IsPredicted, value) %>%
select(-row_num)

我们得到了我们想要的整洁形式。

关于R:编写for循环计算差值并存储在新变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45918549/

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