如何创建一个使用R中数据集的值创建矩阵的函数?

如何创建一个使用R中数据集的值创建矩阵的函数?,r,function,R,Function,我有一个包含6个变量的120个观察值的数据集。五个变量是因子,一个变量是我的目标变量。 我需要编写一个函数,它将创建一个矩阵(针对每个因子),其中包含因子的每一级作为列,目标变量的最大值作为第一行,目标变量的最小值作为第二行 我知道如何创建矩阵,但是当我需要通过函数创建矩阵时,我会不知所措。 有人能帮忙吗 下面是一个简单的示例,说明了我想通过一个虚构的easy数据集实现的目标。 如您所见,对于每个级别的因子(在图片因子1上),我想指出目标的最高值和目标的最低值 以下是我自己的数据子集: &g

我有一个包含6个变量的120个观察值的数据集。五个变量是因子,一个变量是我的目标变量。 我需要编写一个函数,它将创建一个矩阵(针对每个因子),其中包含因子的每一级作为列,目标变量的最大值作为第一行,目标变量的最小值作为第二行

我知道如何创建矩阵,但是当我需要通过函数创建矩阵时,我会不知所措。 有人能帮忙吗

下面是一个简单的示例,说明了我想通过一个虚构的easy数据集实现的目标。

如您所见,对于每个级别的因子(在图片因子1上),我想指出目标的最高值和目标的最低值

以下是我自己的数据子集:

 > dput(data_plu[1:4, ])
    structure(list(NaNO3 = structure(c(2L, 8L, 8L, 3L), .Label = c("10", 
    "14", "18", "2", "22", "26", "30", "6"), class = "factor"), 
CaCl2 = structure(c(4L, 
    8L, 8L, 8L), .Label = c("0.1", "0.28", "0.46", "0.64", "0.82", 
    "1", "1.19", "1.37"), class = "factor"), PO4 = structure(c(1L, 
    5L, 5L, 6L), .Label = c("0.1", "0.8", "1.5", "2.2", "2.9", "3.6", 
    "4.3", "5"), class = "factor"), NH4Cl = structure(c(5L, 3L, 3L, 
    6L), .Label = c("0.5", "10.86", "12.93", "15", "2.58", "4.65", 
    "6.72", "8.79"), class = "factor"), MgSO4 = structure(c(4L, 7L, 
    1L, 7L), .Label = c("0.21", "0.35", "0.5", "0.64", "0.79", "0.93", 
    "1.08", "1.22"), class = "factor"), DC = c(15000L, 707500L, 720000L, 
    872500L)), row.names = c(NA, 4L), class = "data.frame")

您可以对此进行修改以满足您的需要。我编写了一个函数来处理一个因子,然后使用
lappy
来处理它们。我已经调用了您的示例数据
dta

stats <- function(x, y) {
    minmax <- aggregate(y, list(x), range)
    cols <- minmax[, 1]
    result <- as.matrix(t(minmax[, -1]))
    dimnames(result) <- list(c("Min", "Max"), Levels=as.character(cols))
    return(result)
}
out <- lapply(dta[, -6], function(x) stats(x, dta$DC))
head(out, 1)
# $NaNO3
#      Levels
#          14     18      6
#   Min 15000 872500 707500
#   Max 15000 872500 720000

stats请分享一点示例数据。我认为
model.matrix
函数可以让你在大部分方面达到目的------但当你谈到想要两行时,我有点困惑,一行是最大值,一行是最小值。你不是有120个观察值吗?如果我的问题不清楚,很抱歉。我在问题中添加了一张图片,用一个更简单的例子来说明我的意思。嗨,莎拉,理想情况下不是图片。。你提到你现在知道要创建一个矩阵,如果你用它来创建一个数据的小例子,有可能吗?啊-忽略我对
模型的评论。矩阵和一个热编码,我完全误解了。请提供可复制的示例
dput()
是一个很好的函数,用于创建数据的复制/粘贴版本,例如
dput(您的_数据[1:4,])
将为我们提供数据的前4行。我在我的问题中添加了数据子集:)谢谢!我先试试别的。似乎有一点细节还不起作用。但我会看看你的解决方案,并试图找到我的错误,这样做!