言葉で説明することと、期待される出力で示すことは一致しません。特に、一意の値をカウントy
すると、入力に基づいて 3 と 2 ではなく、2 と 1 になります。書かれた説明に行く:
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