【发布时间】:2018-03-09 19:38:14
【问题描述】:
我有一个暗淡的 15 x 555 行样本数与列蛋白质名称的数据框。该数据框的最后 3 列包含映射信息,即 Treatment、Treatment_Time 和 Month,并被标记为这样。
在循环遍历数据框列时,我希望使用 wilcoxon.test 进行 wilcoxon 测试,并根据映射信息直接从 df 中获取信息。
粗略的例子:
pre_post <- vector()
for(i in names(df[,1:552])){
pre_post <- append(pre_post, wilcox.test(df[df$Treatment_Time %in% "Pre", i], df[df$Treatment_Time %in% "Post", i], na.action(na.omit))$p.value))}
期望有一个长度为552的wilcoxon测试p值的向量。如果wilcoxon测试不能按预期完成,我希望输入和“NA”。
此脚本一直有效,直到特定列没有像 Post 这样的数据子集的值,然后传递上述错误。我已经尝试使用关于测试列中数据子集长度的 if else 语句来解决这个问题,但我无法让它工作。
for(i in names(df[,1:552])){
if(length(df[df$Treatment_Time %in% "Pre", i])>1 & length(df[df$Treatment_Time %in% "Post", i])>1){
pre_post <- append(pre_post, wilcox.test(df[df$Treatment_Time %in% "Pre", i], df[df$Treatment_Time %in% "Post", i], na.action(na.omit))$p.value)
}
else{
all_amb_all_delay <- append(all_amb_all_delay, "NA")
}
}
任何帮助将不胜感激,谢谢!
【问题讨论】:
-
寻求帮助时,您应该包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出。在不存在此类值的情况下,您希望发生什么?
-
您的代码不会产生任何结果,因为对
print()的隐式调用不会在循环中发生。您需要显式使用print()函数或将值添加到向量以保留结果。看看for (i in 1:5) 1 + i和for (i in 1:5) print(1 + i)的区别。如果你使用wilcox.test()的公式方法,你的代码也会更简单。阅读手册页:?Control和?wilcox.test。
标签: r dataframe statistics