Aşağıda belirtilen bir veri çerçevesi var:
structure(
list(ID = c("P-1", " P-1", "P-1", "P-2", "P-3", "P-4", "P-5", "P-6", "P-7",
"P-8"),
Date = c("2020-03-16 12:11:33", "2020-03-16 13:16:04",
"2020-03-16 06:13:55", "2020-03-16 10:03:43",
"2020-03-16 12:37:09", "2020-03-16 06:40:24",
"2020-03-16 09:46:45", "2020-03-16 12:07:44",
"2020-03-16 14:09:51", "2020-03-16 09:19:23"),
Status = c("SA", "SA", "SA", "RE", "RE", "RE", "RE", "XA", "XA", "XA"),
Flag = c("L", "L", "L", NA, "K", "J", NA, NA, "H", "G"),
Value = c(5929.81, 5929.81, 5929.81, NA, 6969.33, 740.08, NA, NA, 1524.8,
NA),
Flag2 = c("CL", "CL", "CL", NA, "RY", "", NA, NA, "", NA),
Flag3 = c(NA, NA, NA, NA, "RI", "PO", NA, "SS", "DDP", NA)),
.Names=c("ID", "Date", "Status", "Flag", "Value", "Flag2", "Flag3"),
row.names=c(NA, 10L), class="data.frame")
Aşağıda belirtilen kodu kullanıyorum:
df %>% mutate(L = ifelse(Flag == "L",1,0),
K = ifelse(Flag == "K",1,0),
# etc for Flag) %>%
mutate(sub_status = NA) %>%
mutate(sub_status = ifelse(!is.na(Flag2) & Flag3 == 0, "a", sub_status),
sub_status = ifelse(is.na(Flag2) & Flag3 != 0, "b", sub_status),
# etc for sub-status) %>%
mutate(value_class = ifelse(0 <= Value & Value <= 15000, "0-15000",
"15000-50000")) %>%
group_by(Date, status, sub_status, value_class) %>%
summarise(L = sum(L),
K = sum(K),
# etc
count = n())
Hangi bana aşağıdaki çıktıyı sağlar:
Date Status sub_status value_class G H I J K L NA Count
2020-03-20 SA a 0-15000 0 0 0 0 1 1 0 2
2020-03-20 SA b 0-15000 0 0 0 0 1 0 0 1
................
................
Sütun ayrı 3 değerleri ve değerleri veya [null] veya NA ve son olarak sütun [null] veya NA ile farklı 7 değerleri DFolduğu, kullanarak aşağıdaki çıktıyı almak istiyorum . Birincisi için birden çok sütun girdimiz var.StatusFlag2Flag3IDFlag3
Value0-15000, 15000-50000 gibi 3 grup oluşturarak aşağıdaki veri çerçevesini oluşturmam gerekiyor.
- Farklı bir kimlik için
Flag20 veya [null] / NAFlag3dışında bir değere sahip ancak 0 veya [null] / NA değerine sahipse, o zaman olura. - Farklı bir kimlik için
Flag30 veya [null] / NAFlag2dışında bir değere sahip ancak 0 veya [null] / NA değerine sahipse,b - Farklı bir kimlik için hem
Flag2& hem deFlag30 veya [Null] / NA dışında bir değere sahipse,c - Farklı bir kimlik için hem
Flag2&Flag3değeri 0 veya [Null] / NA değerine sahipse,d
Aşağıdaki yapının, yukarıda belirtilen datafrmae düzenlemek istiyorum percentve Totalsütun.
2/5Durumun sub_statusToplam'a bölüneceğini, kendi yüzdesine bölüneceğini göstermek istediklerini belirttim Status.
16/03/2020 0 - 15000 15000 - 50000
Status count percent L K J H G [Null] count percent L K J H G [Null] Total
SA 1 1/8 (12.50%) 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1
a 1 1/1(100.00%) 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1
b 0 - 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0
c 0 - 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0
d 0 - 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0
RE 4 50.00% 0 1 1 0 0 2 0 - 0 0 0 0 0 0 4
a 0 - 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0
b 1 25.00% 0 0 1 0 0 1 0 - 0 0 0 0 0 0 1
c 1 25.00% 0 1 0 0 0 1 0 - 0 0 0 0 0 0 1
d 2 50.00% 0 0 0 0 0 2 0 - 0 0 0 0 0 0 2
XA 3 37.50% 0 0 0 1 1 1 0 - 0 0 0 0 0 0 3
a 0 - 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0
b 2 66.67% 0 0 0 1 0 1 0 - 0 0 0 0 0 0 2
c 0 - 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0
d 1 33.33% 0 0 0 0 1 0 0 - 0 0 0 0 0 0 1
Total 8 100.00% 1 1 0 0 1 3 0 - 0 0 0 0 0 0 8
Eğer veri startdateçerçevesi çıkış veri çerçevesindeki tüm değeri 0 olarak tutmak son tarih yoksa, 16/03/2020 olan son tarih dayalı gerekli çıktı bahsetti. Yüzde sütunu sadece referans içindir, hesaplanan yüzde değerleri olacaktır.
Ayrıca, yapıyı sabit tutmak istiyorum. Örneğin, eğer bir gün için herhangi bir parametre için mevcut değilse, çıkış yapısı 0 değeri ile aynı olacaktır.
Örnek için, varsayalım tarih 17/03/2020duruma sahip satır yok SAya sub_status cbu kadar değere sahip çıktıda olacak için yer tutucu 0.
dputveri kümesinden başlayabilir misiniz - bu üçüncü kod bloğudur. Çıktıdan memnun olduğunuz için önceki kod alakalı görünmüyor.
2/5Sadece temsil amacıyla sakladığım yüzde sütunu . Sadece yüzde işareti ile 2 ondalık basamak ile yüzde değeri olacaktır.