簡體   English   中英

在 r 中使用多個邏輯標准進行子集化

[英]Using multiple logical criteria for subsetting in r

我有一個包含三個變量/因素(ML1、ML2、ML3)的數據集(來自 efa 的加載),我想提取絕對值 >= 0.3 的案例名稱,恰好是一個變量/因素。

這是我到目前為止的工作:

items <- row.names(loadings1[(abs(loadings1$ML1) >= 0.3 | abs(loadings1$ML2) >= 0.3 | abs(loadings1$ML3) >= 0.3) & sum(abs(loadings1$ML1) >= 0.3 , abs(loadings1$ML2) >= 0.3 , abs(loadings1$ML3) >= 0.3 ) == 1,])

它只返回一個空字符,我知道這不是因為沒有符合我的標准的案例。

我也試過:

row.names(loadings1[abs(loadings1$ML1) >= 0.3 | abs(loadings1$ML2) >= 0.3 | abs(loadings1$ML3) >= 0.3 & sum(abs(loadings1$ML1) >= 0.3 , abs(loadings1$ML2) >= 0.3 , abs(loadings1$ML3) >= 0.3 ) == 1,])

第二次嘗試似乎完全忽略了 & 條件,即使不同的 or 條件有效。

我也找到了這個來尋求幫助,但並沒有真正明白為什么它在我的情況下不起作用。

有任何想法嗎?

您可以使用rowSums來查找正好有一個變量>= 0.3

items <- row.names(loadings1)[rowSums(abs(loadings1[c("ML1","ML2","ML3")]) >= 0.3) == 1]
items
#[1] "6" "7"

數據:

set.seed(1)
(loadings1 <- data.frame(id = 1:10, ML1 = rnorm(10), ML2 = rnorm(10), ML3 = rnorm(10)))
#   id        ML1         ML2         ML3
#1   1 -0.6264538  1.51178117  0.91897737
#2   2  0.1836433  0.38984324  0.78213630
#3   3 -0.8356286 -0.62124058  0.07456498
#4   4  1.5952808 -2.21469989 -1.98935170
#5   5  0.3295078  1.12493092  0.61982575
#6   6 -0.8204684 -0.04493361 -0.05612874
#7   7  0.4874291 -0.01619026 -0.15579551
#8   8  0.7383247  0.94383621 -1.47075238
#9   9  0.5757814  0.82122120 -0.47815006
#10 10 -0.3053884  0.59390132  0.41794156

使用dplyr方法,您可以這樣做。 case_when在應用多個條件時很有用。

set.seed(1)
df <- tibble(id = 1:10, ML1 = rnorm(10), ML2 = rnorm(10), ML3 = rnorm(10))
df %>% 
  mutate(
    Which = case_when(
      abs(ML1) >= 0.3 & abs(ML2) < 0.3 & abs(ML3) < 0.3 ~ "ML1",
      abs(ML2) >= 0.3 & abs(ML1) < 0.3 & abs(ML3) < 0.3 ~ "ML2",
      abs(ML3) >= 0.3 & abs(ML1) < 0.3 & abs(ML2) < 0.3 ~ "ML3",
    )
  ) %>%
  filter(!is.na(Which)) %>%
  select(id) %>%
  unlist

這將打印符合條件的 id 列表。 您也可以將其保留為數據框並獲取更多信息,例如哪個 ML 列 >= 0.3。

編輯:忘記絕對值。 此外,使用您的方法會起作用,但是您必須在每個條件周圍使用括號,例如 (cond1 & !cond2 & !cond3) | (!cond1 & cond2 & !cond3)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM