gpt4 book ai didi

根据区域数量 reshape 我的数据

转载 作者:行者123 更新时间:2023-12-04 10:52:09 27 4
gpt4 key购买 nike

这是我的数据

information=structure(list(X = 1:15, Name = structure(c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("ABL", "ARP"
), class = "factor"), Zone = c(1L, 2L, 7L, 8L, 9L, 10L, 11L,
12L, 1L, 2L, 4L, 5L, 6L, 7L, 9L), X3 = c(1L, 1L, 1L, 1L, 2L,
2L, 1L, 1L, 3L, 0L, 1L, 2L, 0L, 1L, 0L), X2 = c(0L, 0L, 0L, 1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L), X5 = c(0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L), X4 = c(0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L), X1 = c(0L,
0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("X",
"Name", "Zone", "X3", "X2", "X5", "X4", "X1"), class = "data.frame", row.names = c(NA, -15L))

我希望所有 Name 有 12 个区域,当没有 Zone 关联时,Zone 将采用缺失值和 X1 中的值到 X5 将取 0。例如,请注意,对于 Name ARP 和 ABL,我没有每个区域 3。

我试过这段代码

library(tidyr)
library(dplyr)
plot_data=information
plot_data$Zone=(factor(plot_data$Zone, levels = c(1:12)))
plot_data= plot_data %>% left_join(data_frame(Zone= factor(1:12)), .)

它给了我:

     Zone     X   Name    X3    X2    X5    X4    X1
(fctr) (int) (fctr) (int) (int) (int) (int) (int)
1 1 1 ABL 1 0 0 0 0
2 1 9 ARP 3 0 0 0 0
3 2 2 ABL 1 0 0 0 0
4 2 10 ARP 0 0 1 0 0
5 3 NA NA NA NA NA NA NA
6 4 11 ARP 1 0 0 1 0
7 5 12 ARP 2 0 0 0 0
8 6 13 ARP 0 0 1 0 0
9 7 3 ABL 1 0 0 0 0
10 7 14 ARP 1 0 0 0 0
11 8 4 ABL 1 1 0 0 0
12 9 5 ABL 2 0 0 0 0
13 9 15 ARP 0 1 0 0 0
14 10 6 ABL 2 0 0 0 1
15 11 7 ABL 1 0 0 0 0
16 12 8 ABL 1 0 0 0 0

我的代码有什么问题?

非常感谢!

最佳答案

首先,我们complete() 数据以确保所有Name 都有所有Zone。然后,我们将 X1X5 列中的 NA 替换为 0:

library(tidyr)
library(dplyr)

information %>%
complete(Name, Zone) %>%
replace_na(as.list(setNames(rep(0, 5), paste0("X", 1:5))))

给出:

#   Name Zone  X X3 X2 X5 X4 X1
#1 ABL 1 1 1 0 0 0 0
#2 ABL 2 2 1 0 0 0 0
#3 ABL 4 NA 0 0 0 0 0
#4 ABL 5 NA 0 0 0 0 0
#5 ABL 6 NA 0 0 0 0 0
#6 ABL 7 3 1 0 0 0 0
#7 ABL 8 4 1 1 0 0 0
#8 ABL 9 5 2 0 0 0 0
#9 ABL 10 6 2 0 0 0 1
#10 ABL 11 7 1 0 0 0 0
#11 ABL 12 8 1 0 0 0 0
#12 ARP 1 9 3 0 0 0 0
#13 ARP 2 10 0 0 1 0 0
#14 ARP 4 11 1 0 0 1 0
#15 ARP 5 12 2 0 0 0 0
#16 ARP 6 13 0 0 1 0 0
#17 ARP 7 14 1 0 0 0 0
#18 ARP 8 NA 0 0 0 0 0
#19 ARP 9 15 0 1 0 0 0
#20 ARP 10 NA 0 0 0 0 0
#21 ARP 11 NA 0 0 0 0 0
#22 ARP 12 NA 0 0 0 0 0

注意:正如@a​​osmith 所提到的,您可以使用 complete()fill 参数代替(它调用 replace_na 内部):

information %>%
complete(Name, Zone, fill = as.list(setNames(rep(0, 5), paste0("X", 1:5))))

请注意,此方法仅对观察到的Zonecomplete()。由于您的初始数据中没有 Zone = 3,因此它不会将此 NameZone 组合添加到结果中。如果您想填充应该观察到但没有观察到的缺失值,您可以使用 full_seq():

information %>%
complete(Zone = full_seq(Zone, period = 1), Name) %>%
#just another way to replace NA in column X3 to X1
mutate_each(funs(replace(., is.na(.), 0)), X3:X1)

关于根据区域数量 reshape 我的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37388330/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com