程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了创建函数以使用来自 R 中不同列表的列表元素生成新值大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决创建函数以使用来自 R 中不同列表的列表元素生成新值?

开发过程中遇到创建函数以使用来自 R 中不同列表的列表元素生成新值的问题如何解决?下面主要结合日常开发的经验,给出你关于创建函数以使用来自 R 中不同列表的列表元素生成新值的解决方法建议,希望对你解决创建函数以使用来自 R 中不同列表的列表元素生成新值有所启发或帮助;

我有一个 19000 x 20 的数据帧,我需要根据桶进行拆分(总共有 5 个桶),然后根据每个桶的对照的平均值和标准差为所有患者生成分数。到目前为止,我已经找到了如何拆分数据并基于使用列表的桶为控件生成均值和标准差的方法,但似乎无法找到生成新分数的最佳方法。

原始数据框

   row_number age length bucket
1           1  11     31      2
2           2  14     30      3
3           3  12     25      3
4           4  13     26      5
5           5  15     19      4
6           6  12     56      1
7           7  17     45      4
8           8  15     31      1
9           9  14     24      5
10         10  16     36      1
@H_874_10@

根据所有患者的桶将数据拆分为列表

allpatIEnts <- split(x = df,f = df$bucket)

# Example data for bucket 1
   row_number age length bucket
1           6  12     56      1
2           8  15     31      1
3          10  16     36      1
@H_874_10@

这会生成一个包含存储桶 1 到 5 的列表元素的列表,每个存储桶的数据帧如存储桶 1 示例所示。

计算健康患者每个桶的平均值

# Function for mean
func_mean <- function(data){
  bucket_mean <- data %>%
    SELEct(age:length)
  bucket_mean <- lapply(bucket_mean,mean)
  bucket_mean <- as.data.frame(bucket_mean)
}

# Apply mean function to List
healthypatIEnts_mean <- map(healthypatIEnts,func_mean)

# Example data for bucket 1 
age length
14  41
@H_874_10@

这会生成一个元素列表,这些元素分别为从 1 到 5 的每个桶的年龄和长度均值,如桶 1 的示例所示。

从健康患者中获取每个桶的 sd

# Function
func_sd <- function(data){
  bucket_sd <- data %>%
    SELEct(age:length)
  bucket_sd <- lapply(bucket_sd,sd)
  bucket_sd <- as.data.frame(bucket_sd)
} 

# Apply sd function to List 
healthypatIEnts_sd <- map(healthypatIEnts,func_sd)

# Example (dummy) data for bucket 1
age length
2   4
@H_874_10@

这会为从 1 到 5 的每个存储桶生成一个元素列表,其中 sd 分别表示年龄和长度,如存储桶 1 的示例所示。

根据健康患者的均值和标准差计算所有患者的分数

我想根据存储桶计算列表元素每一行的新分数。本质上,对于一个桶的年龄和长度的每个值:

(allpatIEnts - healthypatIEnts_mean)/healthypatIEnts_sd@H_874_10@ 每个桶

例如,bucket 1 的最终数据应如下所示:

   row_number   age   length  bucket
1           6   -1      3.75     1
2           8    0.5   -2.5      1
3          10    1     -1.25     1
@H_874_10@

我想我将不得不创建一个函数并可能使用 {purr},但我不确定如何从 healthypatIEnts_mean@H_874_10@ 和 healthypatIEnts_sd@H_874_10@ 获取输出来为 allpatIEnts@H_874_10@ 生成新分数基于每个桶。感谢您的帮助!

解决方法

您不一定需要在此处为​​每个 bucket@H_874_10@ 拆分数据集。我们可以使用 group_by@H_874_10@ 分别处理每个桶。

library(dplyr)

healthypatients %>%
  group_by(bucket) %>%
  summarise(across(c(age,length),list(mean = mean,sd = sd))) %>%
  left_join(df,by = 'bucket') %>%
  mutate(length_score = (length - length_mean)/length_sd,age_score = (age - age_mean)/age_sd) 
@H_874_10@

大佬总结

以上是大佬教程为你收集整理的创建函数以使用来自 R 中不同列表的列表元素生成新值全部内容,希望文章能够帮你解决创建函数以使用来自 R 中不同列表的列表元素生成新值所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。