我有這樣一個數據幀:數據幀保持一列內排序固定
a v
1 g 9
2 g 2
3 z 2
4 z 3
5 a 5
6 a 4
我想保持列「A」完整[未分類的,因爲它是]和排序列「V」內列'a'。生成的輸出應該是這樣的:
a v
1 g 2
2 g 9
3 z 2
4 z 3
5 a 4
6 a 5
我試過使用命令命令,但後來我必須按兩列排序。有人可以幫我嗎?
謝謝!
我有這樣一個數據幀:數據幀保持一列內排序固定
a v
1 g 9
2 g 2
3 z 2
4 z 3
5 a 5
6 a 4
我想保持列「A」完整[未分類的,因爲它是]和排序列「V」內列'a'。生成的輸出應該是這樣的:
a v
1 g 2
2 g 9
3 z 2
4 z 3
5 a 4
6 a 5
我試過使用命令命令,但後來我必須按兩列排序。有人可以幫我嗎?
謝謝!
下面是使用ave
功能的方法:
> dat$v <- ave(dat$v, dat$a, FUN=sort)
> dat
a v
1 g 2
2 g 9
3 z 2
4 z 3
5 a 4
6 a 5
的data.table
封裝使這個簡單的:
library(data.table)
dat <- structure(list(a = c("g", "g", "z", "z", "a", "a"), v = c(9L,
2L, 2L, 3L, 5L, 4L)), .Names = c("a", "v"), row.names = c(NA,
-6L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x1b2cba8>)
dat[, list(v=sort(v)), by=a]
# a v
# 1: g 2
# 2: g 9
# 3: z 2
# 4: z 3
# 5: a 4
# 6: a 5
謝謝它的作品!你能修改代碼,以便排序後的列具有與之前相同的列名稱,即'v' – user1998031
@MthetheLundberg啊,我猜你不能!下面的'ave'答案可能是基R的最佳方式。@ user1998031請參閱我的使用'list()'編輯。 – Justin
擴展在@GregSnow於以下情況:有超過兩列多(因爲我可以看到實際上使用它)。根據a
組
排序v
,保持x
:
d <- read.table(header=TRUE, text=" a v x
1 g 9 10
2 g 2 20
3 z 2 30
4 z 3 40
5 a 5 60
6 a 4 70")
ord <- ave(seq_along(d$a)-1, d$a, FUN=min) + ave(d$v, d$a, FUN=order)
d[ord,]
## a v x
## 2 g 2 20
## 1 g 9 10
## 3 z 2 30
## 4 z 3 40
## 6 a 4 70
## 5 a 5 60
保證是連續的'了'獨特的水平,在你的榜樣? –
是的,他們是連續的 – user1998031