Как я могу создать функцию, которая создает матрицу, используя значения из моего набора данных в R? - PullRequest
1 голос
/ 05 ноября 2019

У меня есть набор данных, содержащий 120 наблюдений за 6 переменными. Пять переменных являются факторами, 1 переменная является моей целевой переменной. Мне нужно написать функцию, которая будет создавать матрицу (для каждого фактора), которая содержит каждый уровень фактора в виде столбцов, а также максимальное значение целевой переменной в качестве первой строки и минимальное значение целевой переменной в качестве второй строки,

Я знаю, как создать матрицу, однако я теряюсь, когда мне нужно сделать это через функцию. Есть ли кто-то, кто может помочь?

Вот простой пример того, чего я хочу достичь с помощью вымышленного простого набора данных. Пример

Как видите, для каждого уровня коэффициента (на коэффициенте изображения 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")

1 Ответ

1 голос
/ 06 ноября 2019

Вы можете изменить это, чтобы удовлетворить ваши потребности. Я написал функцию для обработки одного фактора, а затем использовал lapply для обработки их всех. Я назвал ваши образцы данных 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...