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
答案 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)
注意:toString
是paste(., collapse=', ')
的包装。 ,
之后有一个空格。如果我们需要在没有空格的情况下让它拥挤,我们可以用toString
替换paste(x, collapse=',')
。