Я хотел бы знать, какие наблюдения присутствуют (›= 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...?