【发布时间】:2018-01-09 19:14:36
【问题描述】:
我发现一些 stackoverflow 问题非常相似,但答案不是我想要的(Loop through columns and apply ddply,Aggregate / summarize multiple variables per group (i.e. sum, mean, etc))
主要区别在于答案以不使用 for 循环(也不应用)而是使用聚合(或类似)的方式简化了他们的问题。但是,我有大量代码可以顺利地进行各种摘要、统计和绘图,所以我真正想做的是让循环或函数正常工作。我目前面临的问题是从在循环中存储为 q 的列名到实际列(get() 对我不起作用)。见下文。
我的数据集与下面类似,但有 40 个特征:
Subject <- c(rep(1, times = 6), rep(2, times = 6))
GroupOfInterest <- c(letters[rep(1:3, times = 4)])
Feature1 <- sample(1:20, 12, replace = T)
Feature2 <- sample(400:500, 12, replace = T)
Feature3 <- sample(1:5, 12, replace = T)
df.main <- data.frame(Subject,GroupOfInterest, Feature1, Feature2,
Feature3, stringsAsFactors = FALSE)
到目前为止,我的尝试使用了 for 循环:
Feat <- c(colnames(df.main[3:5]))
for (q in Feat){
df_sum = ddply(df.main, ~GroupOfInterest + Subject,
summarise, q =mean(get(q)))
}
我希望提供如下输出(尽管我意识到现在需要一个单独的合并函数):
但是,根据我的操作方式,我要么得到一个错误(“get(q) 中的错误:第一个参数无效”),要么它平均一个特征的所有值,而不是按主题和 GroupOfInterest 分组。
我也尝试过使用列表和 lapply,但遇到了类似的困难。
从我收集的信息来看,我的问题在于 ddply 期待 Feature1。但是,如果我循环遍历,我要么为它提供“Feature1”(字符串)或(1,14,14,16,17 ...),它不再是主题和组分组所需的数据框的一部分.
非常感谢您在解决这个问题和教我这个过程的工作原理方面提供的任何帮助。
【问题讨论】:
-
好问题。它迫使学习许多基本的东西