Данные подмножества, основанные на наличии / отсутствии в уникальных образцах и группах образцов в R

Я хотел бы знать, какие наблюдения присутствуют (›= 1) во всех выборках (столбцах), а какие уникальны для каждого подмножества выборок (Континент или Страна).

Например: -df_all = будет содержать Obs5 (›= 1 во всех примерах)

  • df_Europe = будет содержать Obs1 (›= 1 в Европе и = 0 в Африке)
  • df_Italy = будет содержать Obs2 (›= 1 в Италии и 0 в остальных)
  • так далее...

Для первого можно использовать:

row_sub = apply(df, 1, function(row) all(row !=0 ))
dff <- df[row_sub,]

НО есть ли способ закодировать его как цикл, используя dplyr, reshape или любой другой, чтобы не делать это вручную для всех из них?

df <- data.frame(column=c("Continent", "Country", "Obs1", "Obs2", "Obs3", "Obs4", "Obs5"), `1`=c("Europe", "Italy", 1,2,2,0,1), `2`=c("Europe", "Portugal", 2,0,0,0,2), `3`=c("Africa", "Nigeria", 0,0,1,2,3), `4`=c("Africa", "Nigeria", 0,0,1,3,4),check.names=FALSE)

df
  column    1       2        3       4 
1 Continent Europe  Europe   Africa  Africa
2 Country   Italy   Portugal Nigeria Nigeria
3 Obs1      1       2        0       0
4 Obs2      2       0        0       0
5 Obs3      2       0        1       1
6 Obs4      0       0        2       3
7 Obs5      1       2        3       4

Я видел здесь нечто подобное Подмножество данных по уровням детализации и применение функции к каждому фрейму данных в R, но я не думаю, что это именно тот результат, который нам нужен.

Это то же самое, что и long_table, если это помогает

library(tidyverse)
df_long <- tibble::tibble(
  ID = 1:20, #use this to sort
  Sample = rep(1:4,5),
  Continent = rep(c(rep("Europe",2),rep("Africa",2)),5),
  Country = rep(c("Italy", "Portugal", rep("Nigeria",2)),5),
  value = c(1, 2,0,0,2,0,0,0,2,0,1,1,0,0,2,3,1,2,3,4))


data_Europe <- df_long %>%
  count(Continent, Sample, wt = value) %>%
  filter(n > 0) %>%
  count(Europe) %% slect...?

person Ecg    schedule 12.11.2020    source источник