R迭代列数据帧

时间:2012-01-18 00:04:15

标签: r dataframe

我想以迭代的方式将统计数据应用于数据框的列:

第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()不是正确的做法。

任何线索?

1 个答案:

答案 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”。