如何重新排序数据框,以便每个索引中的元素按字母数字顺序排序?

时间:2015-12-10 05:07:43

标签: r

a <- c("rey,ben","ben,rey","jodi,ben","ben,jodi","rey","bob,rey,ben","rey,bob,ben")
b <- c(1,1,2,2,3,4,4)
c <- c(13,17,13,20,21,14,17)
test1 <- data.frame(Staff=a,Value=b,Code=c)

> str(test1)
'data.frame':   5 obs. of  3 variables:
 $ Staff: Factor w/ 7 levels "ben,jodi","ben,rey",..: 5 2 3 1 4
 $ Value: num  1 1 2 2 3
 $ Code : num  13 17 13 20 21

> test1
         Staff Value Code
 1     rey,ben     1   13
 2     ben,rey     1   17
 3    jodi,ben     2   13
 4    ben,jodi     2   20
 5         rey     3   21
 6 bob,rey,ben     4   14
 7 rey,bob,ben     4   17

如何重新排序test1$Staff内的级别,以便每个索引中的元素按字母顺序排序?这是一个小子集,我将有许多名称和长度组合1,2,3,4名称长,超过10个名称。我想重新排序,以便在rey,ben之前将ben,rey输入的记录变为ben排序rey

期望的结果:

          Staff Value Code
 1     ben,rey     1   13
 2     ben,rey     1   17
 3    ben,jodi     2   13
 4    ben,jodi     2   20
 5         rey     3   21
 6 ben,bob,rey     4   14
 7 ben,bob,rey     4   17

1 个答案:

答案 0 :(得分:3)

如@pascal所述,所需的输出可能不正确。假设我们通过分隔符split了解问题,,'人员'列,以获得list,然后我们sort元素和paste它在一起。

test1$Staff <- sapply(strsplit(as.character(test1$Staff), ','), 
              function(x) toString(sort(x)))
test1
#          Staff Value Code
#1      ben, rey     1   13
#2      ben, rey     1   17
#3     ben, jodi     2   13
#4     ben, jodi     2   20
#5           rey     3   21
#6 ben, bob, rey     4   14
#7 ben, bob, rey     4   17

如果我们需要factor列,

test1$Staff <- factor(test1$Staff)

注意:toStringpaste(., collapse=', ')的包装。 ,之后有一个空格。如果我们需要在没有空格的情况下让它拥挤,我们可以用toString替换paste(x, collapse=',')

相关问题