![](/img/trans.png)
[英]In R how do I compare values in a row of a dataframe by a single value in the same row of another dataframe
[英]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.