#r
#r
Вопрос:
Итак, в основном, какие дни в течение обеих недель были либо меньше 0, либо больше 0
[,1] [,2]
M -5 -5
T 8 -9
W -4 9
Th 6 8
F 7 -3
# however my output is this
[,1] [,2] #I want the row label M, how do I do that?
-1 -5
Ответ №1:
Мы можем использовать drop = FALSE
, чтобы избежать удаления измерений, поскольку по умолчанию используется
x[i, j, … , drop = TRUE]
когда в качестве выходных данных используется одна строка, drop = TRUE
будет отбрасывать измерения, чтобы вернуть vector
diff[diff[, "Week1"] <0 amp; diff[, "Week2" ]< 0, , drop = FALSE]
#. Week1 Week2
#Monday -1 -5
Или другой вариант Reduce
diff[Reduce(`amp;`, asplit(diff > 0, 2)), , drop = FALSE]
# Week1 Week2
#Thursday 4 5
ПРИМЕЧАНИЕ: diff
это имя функции. Лучше называть идентификаторы объектов разными именами
Мы могли бы также использовать tidyverse
library(dplyr)
diff %>%
as.data.frame %>%
rownames_to_column('rn') %>%
filter(across(starts_with('Week'), `>`, 0))
# rn Week1 Week2
#1 Thursday 4 5
данные
diff <- structure(c(-1L, 8L, -3L, 4L, 7L, -5L, -4L, 9L, 5L, -2L), .Dim = c(5L,
2L), .Dimnames = list(c("Monday", "Tuesday", "Wednesday", "Thursday",
"Friday"), c("Week1", "Week2")))
Комментарии:
1. Можете ли вы показать dput данных. Я думал, что это
matrix
2. Это матрица!
Ответ №2:
Вы можете использовать rowSums
для получения строк с обоими неделями меньше 0 или выше 0.
under <- diff[rowSums(diff > 0) == 0, , drop = FALSE]
over <- diff[rowSums(diff < 0) == 0, , drop = FALSE]
under
# Week1 Week2
#Monday -1 -5
over
# Week1 Week2
#Thursday 4 5