Dplyr filtresi (herhangi bir satırda)
R dünyasında yeniyim, bu günlerde dplyr'ın filtre işleviyle ilgili sorun yaşıyorum. Bir df var ve bir sayıdan büyük değerleri filtrelemem gerekiyor, ancak bazı satırlarda birden çok değer var (ile ayrılmış; ). Örneğin bu df var
ID value1 value2
1 1;0;3.4 4
2 3 5
3 0.5;2;1.3 0
4 5;0.1 3
Filtrem, değer1'deki bir veya daha fazlasının 3'ten büyük veya eşit olmasıdır. Dplyr işlev filtresini kullanıyorum çünkü diğerlerinin df filtrelerini gerçekleştirmem gerekiyor. Bu benim kodum.
filt <- df %>% filter(any(as.numeric(unlist(strsplit(value1,';',fixed=TRUE))) >=3))
Ancak bu durumda, herhangi bir fonksiyon df'nin tüm değerlerini dikkate alır (düşündüğüm gibi satıra göre değil), bu nedenle, tüm df'yi aldım ve bu doğru değil.
Bu örnek için 1,2 ve 4 numaralı satırı elde etmem gerekiyor.
Sanırım satır bazında kontrol etmeli ve şuna göre ayırmalıyım; , ancak bunu dplyr'ın filtre işlevi ile nasıl yapacağımı bilmiyorum.
Çok teşekkürler!
Yanıtlar
Bir seçenek, 'değer1'i' separate_rows
den tidyr
, 'ID'ye göre gruplandırarak ,' değer1'de 3'e eşit veya daha büyük öğeye filter
sahip grupları any
, ardından summarise
sütunları paste
ing ve first
'değer2' öğesini alarak bölmek olabilir.
library(dplyr)
library(tidyr)
df %>%
separate_rows(value1, sep = ";", convert = TRUE) %>%
group_by(ID) %>%
filter(any(value1 >=3)) %>%
summarise(value1 = str_c(value1, collapse=";"), value2 = first(value2))
# A tibble: 3 x 3
# ID value1 value2
# <int> <chr> <int>
#1 1 1;0;3.4 4
#2 2 3 5
#3 4 5;0.1 3
Ya kullanarak map
ilestrsplit
library(purrr)
df %>%
filter(map_lgl(strsplit(value1, ";"), ~ any(as.numeric(.x) >=3)))
# ID value1 value2
#1 1 1;0;3.4 4
#2 2 3 5
#3 4 5;0.1 3
veri
df <- structure(list(ID = 1:4, value1 = c("1;0;3.4", "3", "0.5;2;1.3",
"5;0.1"), value2 = c(4L, 5L, 0L, 3L)), class = "data.frame", row.names = c(NA,
-4L))