R中矩阵的值子集

时间:2015-02-13 01:43:51

标签: r subset mean

我正在尝试从数据框中提取值的子集以获得子集的平均值,但我无法弄清楚如何执行此操作。

我试过这个

kg_name=cat(shQuote(k_categories[1,]), "\n")
m[1] = mean(subset(dt, dt[2]==kg_name)[,1])

因此,我必须提取的值的类别位于此k_categories向量中。它们例如是一个,两个和三个。在第一行代码中,我在值中添加引号,这样我就可以得到“一”,“二”,“三”。现在,第二行尝试通过提取与第二列中的字符串“one”匹配的两列数据帧dt的值来计算均值。

如果我这样做,现在一切正常

m[1] = mean(subset(dt, dt[2]=="one")[,1])

但是,如果我从k_categories中提取类别的名称,那么我会收到此错误(我也将部分跟踪)

Error in matrix(unlist(value, recursive = FALSE, use.names = FALSE), nrow = nr,  : 
length of 'dimnames' [2] not equal to array extent 
8 matrix(unlist(value, recursive = FALSE, use.names = FALSE), nrow = nr, 
dimnames = list(rn, cn)) 
7 Ops.data.frame(dt[2], kg_name) 
6 eval(expr, envir, enclos) 
5 eval(e, x, parent.frame()) 
4 subset.data.frame(dt, dt[2] == kg_name) 
3 subset(dt, dt[2] == kg_name) 

编辑(添加dt数据框示例)

         Values     Categories
              1            one
              3            two
              2          three
              4            one
              3            two
              2            two

1 个答案:

答案 0 :(得分:0)

这个脚本给了我平均值。

a = c("one", "two", "three", "one", "two", "two")
b = c(1, 3, 2, 4, 3, 2)
d = data.frame(values = b, categories = a)

uniques = unique(a)

for(i in 1:length(uniques))
  print(mean(subset(d, categories==uniques[i])$values))

您可以将其保存为变量,而不是打印该值。我想我并没有真正理解你要做的事情......