我正在使用dplyr
包处理数据,需要按字母顺序按其中一列排序data.frame
。问题是此列为character
而dplyr
以错误的方式排列data.frame
。
这是一个例子。
require("dplyr")
set.seed(7)
df1 <- data.frame(name = sample(c("A", "a", "b", "B"), 20, T),
value = rnorm(20), stringsAsFactors = F)
str(df1)
# 'data.frame': 20 obs. of 2 variables:
# $ name : chr "B" "a" "A" "A" ...
# $ value: num 0.357 2.717 2.281 0.324 1.896 ...
df1 %>% group_by(name) %>% summarise(val = sum(value))
# Source: local data frame [4 x 2]
#
# name val
# 1 A 5.4297509
# 2 B 0.8402506
# 3 a 3.8079681
# 4 b 0.7522799
在name
栏中首先是首都,然后是小写字母。 arrange
不会改变任何事情。如果我们将name
变量设为factor
,那么它将按正确的顺序排列。就是这样
set.seed(7)
df2 <- data.frame(name = sample(c("A", "a", "b", "B"), 20, T),
value = rnorm(20), stringsAsFactors = T)
df2 %>% group_by(name) %>% summarise(val = sum(value))
# Source: local data frame [4 x 2]
#
# name val
# 1 a 3.8079681
# 2 A 5.4297509
# 3 b 0.7522799
# 4 B 0.8402506
在我的数据处理中,我想保留name
character
类型,打破%>%
- 使用其他代码管道dplyr
代码也不太好那么,是否可以dplyr
将第一个df1
排序为df2
?