列名称和输入中的dplyr tidyr排列错误
我正在尝试从列名称和输入中的dplyr tidyr排列错误,r,layout,dplyr,tidyr,spread,R,Layout,Dplyr,Tidyr,Spread,我正在尝试从tidyr对数据集执行spread功能,该数据集包含飞机旅行的目的地和始发地名称及其乘客数量。我试图建立一个最终可以用来制作热图的表格。因此,我希望将原始变量放在行中,将目标变量放在列中 我尝试使用不同的参数组合运行代码,并使用排列,但最终总是出现错误 如果我将排列与key\u col和val\u col一起使用,我会得到: 匹配错误(x,表格,nomatch=0L): 找不到对象“Destination.Region” 在我的大型数据集上,它会产生另一种类型的错误: colname
tidyr
对数据集执行spread
功能,该数据集包含飞机旅行的目的地和始发地名称及其乘客数量。我试图建立一个最终可以用来制作热图的表格。因此,我希望将原始变量放在行中,将目标变量放在列中
我尝试使用不同的参数组合运行代码,并使用排列
,但最终总是出现错误
如果我将排列
与key\u col
和val\u col
一起使用,我会得到:
匹配错误(x,表格,nomatch=0L):
找不到对象“Destination.Region”
在我的大型数据集上,它会产生另一种类型的错误:
colnames中的错误这里有一些东西可以尝试:
1) 我将把data2
转换成data.frame
。它使使用它变得容易得多
data2<-matrix(NA, nrow = 7, ncol=3)
colnames(data2)<-c("Origin.Destination", "Total.Passengers", "Destination.Region")
data2[,1] <- c("EAST AFRICA","SOUTHERN AFRICA","WEST AFRICA", "EAST AFRICA", "SOUTHERN AFRICA", "EAST AFRICA","EAST AFRICA")
data2[,2] <- c(100, 5000, 200, 10000, 200, 20, 4000)
data2[,3] <- c("WESTERN EUROPE", "SOUTH AMERICA", "ASIA", "SOUTH AMERICA", "ASIA", "WESTERN EUROPE", "WESTERN EUROPE")
data3<-data.frame(data2)
但如果:
data3$index<-1:nrow(data3)
DF<-
data3 %>%
spread_(key_ = "Destination.Region",
value_ = "Total.Passengers",
convert = TRUE,
drop = FALSE)
DF
Origin.Destination index ASIA SOUTH AMERICA WESTERN EUROPE
1 EAST AFRICA 1 NA NA 100
2 EAST AFRICA 2 NA NA NA
3 EAST AFRICA 3 NA NA NA
4 EAST AFRICA 4 NA 10000 NA
5 EAST AFRICA 5 NA NA NA
6 EAST AFRICA 6 NA NA 20
7 EAST AFRICA 7 NA NA 4000
8 SOUTHERN AFRICA 1 NA NA NA
9 SOUTHERN AFRICA 2 NA 5000 NA
10 SOUTHERN AFRICA 3 NA NA NA
11 SOUTHERN AFRICA 4 NA NA NA
12 SOUTHERN AFRICA 5 200 NA NA
13 SOUTHERN AFRICA 6 NA NA NA
14 SOUTHERN AFRICA 7 NA NA NA
15 WEST AFRICA 1 NA NA NA
16 WEST AFRICA 2 NA NA NA
17 WEST AFRICA 3 200 NA NA
18 WEST AFRICA 4 NA NA NA
19 WEST AFRICA 5 NA NA NA
20 WEST AFRICA 6 NA NA NA
21 WEST AFRICA 7 NA NA NA
总计。乘客
与乘客
?我的问题是输入错误。我刚刚纠正了它。但我的代码仍然有问题。感谢您的注意。您的示例数据似乎还以其他方式错误标记了列。你为什么不先完全修正你的例子呢?我明白了,我也修正了。谢谢。我无法用示例数据集重现这两条错误消息。我得到了标准的“重复标识符”错误,如果我删除了重复标识符spread
则不会出错。您可以更新您的示例,使其更像您的实际数据集,或者如果实际数据太大而无法dput
,则可以包含实际数据的结构(从str(data2)
)。您好@Bryan,事实上,我正在处理数据帧。然而,我不知道为什么我们需要一个索引列。我试着在我的数据上使用它和你的代码,我得到了错误:utils::getS3method(“as_data_frame”,“matrix”,envir=asNamespace(“tibble”):未使用的参数(envir=asNamespace(“tibble”))需要索引,因为(参考示例数据data3
)列1,6和7都以东非为起点。目的地,西欧为目的地。地区。除了Total.Passengers之外,没有什么可以区分这些行。由于该列被用于扩展
,因此它变得模棱两可。例如,从东非到西欧,它应该使用哪个值?100、20或4000?嗨,布莱恩,这正是我希望的结果,谢谢你的解释。但我仍然在(envir=asNamespace(“tibble”)中遇到了这个错误。我复制粘贴了你的代码并得到了错误,所以我猜问题来自我的软件中的某个地方。。我安装了tibble
库并播放了不同类型的数据帧,但仍然无法解决它。检查编辑是什么意思?我刚开始学习R,还有很多东西要学!谢谢你,检查编辑我只是想检查我在原来的帖子中添加了什么。我的代码是否与在我的答案中创建的示例数据集data3
一起工作?您的工作是否需要TIBLE
软件包?如果没有,请尝试在新(重新启动)环境中的基本data.frame
上运行代码。
data2<-matrix(NA, nrow = 7, ncol=3)
colnames(data2)<-c("Origin.Destination", "Total.Passengers", "Destination.Region")
data2[,1] <- c("EAST AFRICA","SOUTHERN AFRICA","WEST AFRICA", "EAST AFRICA", "SOUTHERN AFRICA", "EAST AFRICA","EAST AFRICA")
data2[,2] <- c(100, 5000, 200, 10000, 200, 20, 4000)
data2[,3] <- c("WESTERN EUROPE", "SOUTH AMERICA", "ASIA", "SOUTH AMERICA", "ASIA", "WESTERN EUROPE", "WESTERN EUROPE")
data3<-data.frame(data2)
DF<-
data3 %>%
spread_(key_ = "Destination.Region",
value_ = "Total.Passengers",
convert = TRUE,
drop = FALSE)
Error: Duplicate identifiers for rows (1, 6, 7)
data3$index<-1:nrow(data3)
DF<-
data3 %>%
spread_(key_ = "Destination.Region",
value_ = "Total.Passengers",
convert = TRUE,
drop = FALSE)
DF
Origin.Destination index ASIA SOUTH AMERICA WESTERN EUROPE
1 EAST AFRICA 1 NA NA 100
2 EAST AFRICA 2 NA NA NA
3 EAST AFRICA 3 NA NA NA
4 EAST AFRICA 4 NA 10000 NA
5 EAST AFRICA 5 NA NA NA
6 EAST AFRICA 6 NA NA 20
7 EAST AFRICA 7 NA NA 4000
8 SOUTHERN AFRICA 1 NA NA NA
9 SOUTHERN AFRICA 2 NA 5000 NA
10 SOUTHERN AFRICA 3 NA NA NA
11 SOUTHERN AFRICA 4 NA NA NA
12 SOUTHERN AFRICA 5 200 NA NA
13 SOUTHERN AFRICA 6 NA NA NA
14 SOUTHERN AFRICA 7 NA NA NA
15 WEST AFRICA 1 NA NA NA
16 WEST AFRICA 2 NA NA NA
17 WEST AFRICA 3 200 NA NA
18 WEST AFRICA 4 NA NA NA
19 WEST AFRICA 5 NA NA NA
20 WEST AFRICA 6 NA NA NA
21 WEST AFRICA 7 NA NA NA
Origin <- c("EAST AFRICA","SOUTHERN AFRICA","WEST AFRICA", "EAST AFRICA", "SOUTHERN AFRICA", "EAST AFRICA","EAST AFRICA")
Passengers <- c(100, 5000, 200, 10000, 200, 20, 4000)
Destination <- c("WESTERN EUROPE", "SOUTH AMERICA", "ASIA", "SOUTH AMERICA", "ASIA", "WESTERN EUROPE", "WESTERN EUROPE")
data3<-data.frame(Origin, Passengers, Destination)
DF<-data3 %>% group_by(Origin, Destination) %>%
summarise(Total.Passengers = sum(Passengers)) %>%
spread(Destination, Total.Passengers)
DF
Origin ASIA SOUTH AMERICA WESTERN EUROPE
(fctr) (dbl) (dbl) (dbl)
1 EAST AFRICA NA 10000 4120
2 SOUTHERN AFRICA 200 5000 NA
3 WEST AFRICA 200 NA NA