数据帧indrur
由指示传输方式的变量S447.1
组成。我使用dplyr
对变量进行分组并将其转换为宽格式。
library(dplyr)
indrurmodes<-indrur %>%
group_by(V024,V025,V190) %>%count(S447.1) %>%
pivot_wider(names_from = S447.1,values_from = n, values_fill = list(n = 0))
它给了我以下输出。但是我想要按特定顺序排列的列-GovtAmb,OthAmb,Jeep,Tempo,Scooter,Bus,Cart,Foot,NA
。我必须对多个过滤的数据帧执行以上代码。每次,我都会得到不同的订单。这使得在使用列索引作为参考的情况下很难执行进一步的算术运算。如何保持所需的列顺序?
V024 V025 V190 GovtAmb Jeep Tempo Foot NA OthAmb Scooter Bus Cart
3 Andaman Rural Middle 67 21 16 16 615 2 3 4 0
4 Andaman Rural Richer 66 39 20 3 617 2 1 0 0
5 Andaman Rural Richest 21 18 5 2 278 0 2 5 1
6 Andhra Rural Poorest 25 0 35 4 294 5 0 6 0
答案 0 :(得分:2)
您有两个选择。
library(dplyr)
library(tidyr)
#Order of the columns you want
vec <- c("GovtAmb","OthAmb","Jeep","Tempo","Scooter","Bus","Cart","Foot",NA)
1)使用pivot_wider
:
pivot_wider
以它们出现的顺序返回该列。因此,您可以在使用arrange
之前按所需顺序pivot_wider
数据。
indrur %>%
group_by(V024,V025,V190) %>%
count(S447.1) %>%
arrange(match(S447.1, vec)) %>%
pivot_wider(names_from = S447.1,values_from = n, values_fill = list(n = 0))
2)使用较旧的spread
,它根据因子级别给出列顺序。
indrur %>%
group_by(V024,V025,V190) %>%
count(S447.1) %>%
mutate(S447.1 = factor(S447.1, levels = vec)) %>%
spread(S447.1,n,fill = 0)