您用文字描述的內容和您在預期輸出中顯示的內容不一致。特別是,根據您的輸入,計算y
的唯一值應該是2和1,而不是3和2。與書面說明會:
DF <- data.frame(t=c(1,1,1,2,2), x=c(1,1,1,1,2), y=c(3,3,2,2,2))
library("plyr")
ddply(DF, .(t), function(DF) {
data.frame(cnt=length(DF$t), colwise(function(x) {length(unique(x))})(DF))
})
或者,如果你想獲得真正的功能看:
library("functional")
ddply(DF, .(t), function(DF) {
data.frame(cnt=length(DF$t), colwise(Compose(unique, length))(DF))
})
或完全與功能模式過分去:
merge(ddply(DF, .(t), summarise, cnt=length(t)),
ddply(DF, .(t), colwise(Compose(unique, length))))
這些都不給你要求的列名;而不是cux
它是x
。但是,他們可以在之後改變。
res <-
merge(ddply(DF, .(t), summarise, cnt=length(t)),
ddply(DF, .(t), colwise(Compose(unique, length))))
names(res)[-(1:2)] <- paste("cu", names(DF)[-1], sep="")
這給
> res
t cnt cux cuy
1 1 3 1 2
2 2 2 2 1
我沒有downvote要麼,但肯定這樣想過,因爲例如不能提供的輸出相協調。 –
@Dwin:固定;對不起 – hoffmanc