【问题标题】:Subset of values from matrix in RR中矩阵的值子集
【发布时间】:2015-02-13 01:43:50
【问题描述】:

我正在尝试从数据框中提取值的子集以获取子集的平均值,但我不知道该怎么做。

我试过了

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

【问题讨论】:

  • 您能否举例说明您拥有的矩阵类型以及您要为其计算汇总统计的子集?
  • 完成。我打印了矩阵的头部

标签: r subset mean


【解决方案1】:

这个脚本给了我平均值。

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))

您可以将其保存到变量中,而不是打印该值。我想我并没有真正理解你想要做什么......

【讨论】:

  • 或多或少,但问题是我不能使用 categories=="one" 因为我通常不知道类别的名称,所以我需要使用 "one" 而不是具有类别名称的向量的值,但显然 R 不喜欢那样。这正是我上面的问题。
  • 第二个版本适合你吗?我确实这样做了,但没有用。
  • 是的,它执行对我来说没有问题。我正在使用 R 版本 3.1.1 (2014-07-10)
  • 是的,我用的一模一样,但它不起作用,很奇怪。
猜你喜欢
  • 2020-06-08
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
相关资源
最近更新 更多