Tôi có một khung dữ liệu được đề cập dưới đây:
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")
Tôi đang sử dụng mã được đề cập dưới đây:
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())
Cung cấp cho tôi đầu ra sau:
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
................
................
Tôi muốn nhận đầu ra sau bằng cách sử dụng DF, trong đó Statuscột có 3 giá trị riêng biệt và Flag2có các giá trị hoặc [null] hoặc NA và cuối cùng Flag3cột có 7 giá trị riêng biệt với [null] hoặc NA. Đối với một khác biệt, IDchúng tôi có nhiều mục của Flag3cột.
Tôi cần tạo khung dữ liệu sau, bằng cách tạo 3 nhóm dựa trên Valuenhư 0-15000, 15000-50000.
- Nếu đối với một ID riêng biệt
Flag2có một số giá trị khác 0 hoặc [null] / NA nhưngFlag3có giá trị 0 hoặc [null] / NA thì nó sẽ như vậya. - Nếu đối với một ID riêng biệt
Flag3có một số giá trị khác 0 hoặc [null] / NA nhưngFlag2có giá trị 0 hoặc [null] / NA thì đó sẽ làb - Nếu đối với một ID riêng biệt cả
Flag2&Flag3có một số giá trị khác 0 hoặc [Null] / NA thì đó sẽ làc - Nếu đối với một ID riêng biệt cả
Flag2&Flag3có giá trị 0 hoặc [Không] / NA thì đó sẽ làd
Tôi muốn sắp xếp các datafrmae đã đề cập ở trên trong cấu trúc sau percentvà Totalcột.
Tôi đã đề cập đến tỷ lệ phần trăm muốn 2/5cho thấy trạng thái sẽ được chia cho Tổng trong khi sub_statussẽ được chia cho tương ứng của chúng 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
Tôi đã đề cập đến đầu ra bắt buộc dựa trên ngày mới nhất là 16/03/2020, nếu khung dữ liệu không có ngày mới nhất theo như startdategiữ tất cả giá trị 0 trong khung dữ liệu đầu ra. Cột tỷ lệ phần trăm chỉ dành cho tham chiếu sẽ có các giá trị phần trăm được tính toán ,.
Ngoài ra, tôi muốn giữ cấu trúc tĩnh. Ví dụ: nếu không có bất kỳ tham số nào trong một ngày thì cấu trúc đầu ra sẽ giống với giá trị 0.
Ví dụ: Giả sử ngày 17/03/2020không có bất kỳ hàng nào có trạng thái SAhoặc sub_status cchủ sở hữu vị trí cho đó sẽ có ở đầu ra với giá trị là 0.
dputbộ dữ liệu bạn thích - đó là khối mã thứ ba. Mã trước đó không xuất hiện có liên quan vì bạn có vẻ như nội dung với đầu ra.
2/5chỉ cho mục đích đại diện. Sẽ chỉ có giá trị phần trăm với 2 dấu thập phân có dấu phần trăm.