Добавление нескольких столбцов, преобразование с несколькими переменными

Да, его приемлемое (неизбежный, необходимый) при определенных обстоятельствах на сообщение Maxim's. Это не означает, что необходимо понравиться он. 2 106 нарушений - вероятно, Слишком многие, и самое меньшее они должны были добавить комментарий в блоке выгоды относительно того, почему было нормально глотать это исключение.

@Dustin Его плохая практика для показа любого исключения назначает в общедоступного пользователя (отслеживания стека, номера строки, и т.д.). Необходимо, вероятно, зарегистрировать исключение и отобразить универсальную ошибку.

5
задан Daan 26 June 2011 в 19:43
поделиться

4 ответа

Вы хотите использовать rowSums (см. Индексацию с вектором символов.)

tmp <- data.frame(a=1:2,b=3:4,d=5:6)
rowSums(tmp[,c("a","d")])

или, в более общем смысле, применить:

apply(tmp[,c("a","d")], 1, sum)
8
ответ дан 18 December 2019 в 10:46
поделиться

Есть много способов выполнить такую ​​операцию (например, применить функцию к строке или столбцу), но, как указывает Эдуардо, применить является наиболее простым:

tmp <- data.frame(a=1:2,b=3:4,d=5:6)
apply(tmp, 1, prod)

Это очень гибкая функция. Например, вы можете выполнить обе операции одновременно с помощью этого вызова:

apply(tmp, MARGIN=1, function(x) c(sum(x), prod(x)))

Выполнение одного и того же анализа по столбцам также просто (параметр MARGIN описывает, используете ли вы строки или столбцы):

apply(tmp, MARGIN=2, function(x) c(sum(x), prod(x)))
4
ответ дан 18 December 2019 в 10:46
поделиться

Отвечая на Ответ Фаррела :

На RSeek для rowProd я обнаружил два пакета - matrixStats и fUtilities . Вы можете посмотреть на них.

Второе решение немного сложно. Вы можете создавать выражения и оценивать их.

X <- structure(list(
    varA = c(0.98, 0.75, -0.56, -1.43, 0.65, -1.15, -1.52, 0.1, 0.06, 0.76),
    varB = c(-0.12, -0.6, 0.62, 0.9, -0.44, 0.37, 0.62, 0.76, -1.61, -0.26),
    varC = c(-0.5, -0.37, -0.43, -0.7, 0.83, -0.24, -0.57, 0.05, -1.31, 0.7),
    varD = c(-0.06, -0.11, 1.03, -1.76, -0.42, -1.21, -0.62, -1, -1.16, 2.13),
    varE = c(-1.96, 0.69, -1.85, -1.74, -1.47, 1.24, 0.29, -1.18, 0.89, 0.42),
    varF = c(0.29, -0.22, -1.29, 1.19, 0.38, -0.23, -0.5, -1.07, -1.83, 0.58),
    varG = c(0.59, -0.41, -1.37, 0.89, -0.75, 0.95, 0.95, -0.9, 0.71, -1.3)
  ),
  .Names = c("varA", "varB", "varC", "varD", "varE", "varF", "varG"),
  row.names = c(NA, -10L), class = "data.frame"
)

metrics <- c("varB","varC","varF")

eval(
  parse( text = paste(metrics,collapse=" * ") ),
  envir = X
)

Некоторые пояснения:

  • paste создать строку выглядит как varB * varC * varF (свертывание для объединения элементов вектора)
  • parse заключается в преобразовании текста в выражение
  • ] eval с envir = X должен выполнить выражение внутри X

Для вашего исходного вопроса вы можете использовать collapse = "+".

edit: если ваши переменные не находятся в данных.

3
ответ дан 18 December 2019 в 10:46
поделиться

Я только что получил ответ. Я знал, что хочу какую-то сумму. Я пошел в помощь R, чтобы найти "сумму". И вот я это нашел. Ответ - перейти по ссылке «colSums» на «rowSums». Итак, где метрики - это вектор символов соответствующих имен столбцов. Следующая строка создает вектор, в котором все числа добавляются в каждую строку.

rowSums(data.frame[metrics])

Как бы это сделать, если бы все значения умножались друг на друга? Я не вижу товаров в строке.

1
ответ дан 18 December 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: