簡體   English   中英

如何檢查r中數據框中的一列值是否對應於數據框中每一行的另一列?

[英]How can I check if a value of a column in a dataframe in r corresponds to a single occurence of another columns for each row of the dataframe?

我有一個這樣的數據框,其中一個列中包含海洋魚類的名稱,另一列中包含它們各自的BIN(這是每種物種的一種ID)。 有時,一個BIN編號可以對應一個以上的物種,而我想檢查哪種物種對應於一個BIN,以及哪些物種在每一行中每個單獨的物種都具有一個以上的BIN。 很抱歉,如果我感到困惑,但是我對如何做到這一點感到非常迷失。 預先感謝您的任何建議

 1.  species          BIN
 2. Tilapia guineensis BOLD:AAL5979
 3. Tilapia zillii BOLD:AAB9042
 4. Fundulus rubrifrons BOLD:AAI7245
 5. Eutrigla gurnardus BOLD:AAC0262
 6.  Sprattus sprattus BOLD:AAE9187
 7.  Gadus morhua BOLD:ACF1143
 8. Clupea harengus BOLD:AAB7944
 (...)

使用dplyr ,您可以做到(我使用具有兩個BIN的物種的樣本數據):

df %>%
 group_by(species) %>%
 summarise(occurrence = n_distinct(BIN),
           BIN = paste(unique(BIN), collapse = ","))

  species             occurrence BIN                      
  <chr>                    <int> <chr>                    
1 Clupea_harengus              1 BOLD:AAB7944             
2 Eutrigla_gurnardus           2 BOLD:AAC0262,BOLD:AAE9187
3 Fundulus_rubrifrons          1 BOLD:AAI7245             
4 Gadus_morhua                 1 BOLD:ACF1143             
5 Sprattus_sprattus            1 BOLD:AAE9187             
6 Tilapia_guineensis           1 BOLD:AAL5979             
7 Tilapia_zillii               1 BOLD:AAB9042 

它計算每個“物種”的BIN數量,並將屬於一個物種的唯一BIN的名稱組合在一起。

樣本數據:

df <- read.table(text = "species          BIN
 2 Tilapia_guineensis BOLD:AAL5979
 3 Tilapia_zillii BOLD:AAB9042
 4 Fundulus_rubrifrons BOLD:AAI7245
 5 Eutrigla_gurnardus BOLD:AAC0262
 6 Eutrigla_gurnardus BOLD:AAE9187
 7  Sprattus_sprattus BOLD:AAE9187
 8  Gadus_morhua BOLD:ACF1143
 9 Clupea_harengus BOLD:AAB7944", header = TRUE,
                 stringsAsFactors = FALSE)

tidyverse另一種選擇是獲取按“種類”分組的distinct行,將“出現” summarise為行數( n() )並使用str_c (來自stringr - tidyverse程序包的一部分-這也將給出存在NA元素時的不同行為)將元素collapse為單個字符串

library(dplyr)
library(stringr)
df %>% 
    distinct() %>%
    group_by(species) %>%
    summarise(occurrence = n(),
       BIN = str_c(unique(BIN), collapse = ","))
# A tibble: 7 x 3
#  species             occurrence BIN                      
#  <chr>                    <int> <chr>                    
#1 Clupea_harengus              1 BOLD:AAB7944             
#2 Eutrigla_gurnardus           2 BOLD:AAC0262,BOLD:AAE9187
#3 Fundulus_rubrifrons          1 BOLD:AAI7245             
#4 Gadus_morhua                 1 BOLD:ACF1143             
#5 Sprattus_sprattus            1 BOLD:AAE9187             
#6 Tilapia_guineensis           1 BOLD:AAL5979             
#7 Tilapia_zillii               1 BOLD:AAB9042 

如果存在NA元素,則行為會稍有不同(除非我們先照顧NA

paste(c(NA, 'a', 'b'), collapse=",")
#[1] "NA,a,b"
str_c(c(NA, 'a', 'b'), collapse=",")
#[1] NA

數據

df <- structure(list(species = c("Tilapia_guineensis", "Tilapia_zillii", 
"Fundulus_rubrifrons", "Eutrigla_gurnardus", "Eutrigla_gurnardus", 
"Sprattus_sprattus", "Gadus_morhua", "Clupea_harengus"), BIN = c("BOLD:AAL5979", 
"BOLD:AAB9042", "BOLD:AAI7245", "BOLD:AAC0262", "BOLD:AAE9187", 
"BOLD:AAE9187", "BOLD:ACF1143", "BOLD:AAB7944")),
class = "data.frame", row.names = c("2", 
"3", "4", "5", "6", "7", "8", "9"))

暫無
暫無

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

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