我想以迭代的方式将统计数据应用于数据框的列:
第1列:'A'代表我想要区分的标签:
for (i in names(dataframe)) {
i <- as.name(i)
group1 <- i[A=="locationX"]
group2 <- i[A!="locationX"]
p <- wilcox.test(group1,group2,na.action(na.omit))$p.value
}
但是,as.name()
是尝试从names(dataframe)
生成的列名中删除引号。
不幸的是它给了我错误:
i [A ==“locationX”]出错: “符号”类型的对象不是可子集化的
我认为as.name()
不是正确的做法。
任何线索?
答案 0 :(得分:9)
如果“A”是一个具有多个“locationX”实例的矢量和,那么对应的和的多个实例的长度是唯一有用的方法“A”与“dataframe”中的行数相同。如果是这种情况,那么这样的事情可能有效:
p <- list()
for (i in names(dataframe)) {
# using as.names not needed and possibly harmful
group1 <- dataframe[[i]][A == "locationX"]
group2 <- dataframe[[i]][A != "locationX"]
p[i] <- wilcox.test(group1,group2,na.action(na.omit))$p.value
}
请注意,即使您的代码没有出现错误,您仍然会在每次循环时覆盖“p”。