【问题标题】:Create multiple datafame创建多个数据框
【发布时间】:2020-04-06 02:22:50
【问题描述】:

我打算从如下数据创建多个数据框:

ID Time Ethnicity LDL  HDL ....
1   1   black
2   2   white
3   1   black
4   2   White

每个数据框是数据中显示的 4 行中 LDLHDL、... 列的平均值。我使用了以下代码,但问题是所有数据帧都是相同的。我的意思是DF[[1]]DF[[2]]、...DF[[15]] 相同。如果您能帮助我找到解决方案,我将不胜感激。

dv=c(names(data[,4:15]))

library(ggplot2)
require(plyr)

for (i in 1:12) {
    DF[[i]] = ddply(data, c("Time", "Ethnicity"), summarize, 
    Mean = mean(data[[paste(dv[i])]], na.rm = T))
}

【问题讨论】:

  • 你能分享一个数据样本 - 它是一个文本文件吗?使用字符串操作(和regex,如果需要)可能有一种更简单的方法来阅读它。
  • 欢迎来到 Stack Overflow!您能否通过分享您的数据样本来重现您的问题,以便其他人可以提供帮助(请不要使用str()head() 或屏幕截图)?您可以使用 reprexdatapasta 包来帮助您。另见Help me Help you & How to make a great R reproducible example?

标签: r loops


【解决方案1】:

plyrretired,你可以使用dplyr。当您执行mean(data[[paste(dv[i])]] 时,您正在对整个列进行子集化,而不是尊重组。因此,DF[[1]]DF[[2]] 等中的所有值的均值相同。

library(dplyr)

output_df <- data %>% 
               group_by(Time, Ethnicity) %>% 
               summarise_at(4:15, mean, na.rm = TRUE) %>% 
               ungroup

如果你想要数据框列表,你可以使用group_split

DF <- output_df %>% group_split(Time, Ethnicity)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多