私はddply
に呼び出しているカラム名に送信したいと考えています。例ddply
コール:カラム名をddplyに関数
ddply(myData, .(MyGrouping), summarise, count=sum(myColumnName))
私はddply
が別の関数内にラップしている場合は、それは私が呼び出し元の関数にmyColumnName
として任意の値を渡すことができるようにこれをラップすることは可能でしょうか?
私はddply
に呼び出しているカラム名に送信したいと考えています。例ddply
コール:カラム名をddplyに関数
ddply(myData, .(MyGrouping), summarise, count=sum(myColumnName))
私はddply
が別の関数内にラップしている場合は、それは私が呼び出し元の関数にmyColumnName
として任意の値を渡すことができるようにこれをラップすることは可能でしょうか?
もっと良い方法があるはずです。そして、それを要約して動作させる方法を理解できませんでした。
my.fun <- function(df, count.column) {
ddply(df, .(x), function(d) sum(d[[count.column]]))
}
dat <- data.frame(x=letters[1:2], y=1:10)
> my.fun(dat, 'y')
x V1
1 a 25
2 b 30
>
count.columnを 'ddply'の関数に直接渡すことができます:' ddply(df、。(x)、function(d)sum(d [[count.column]))) 'は少ないコードを意味し、 'eval'を避けます。 –
@TylerRinkerええ、そのevalは、私がそれを要約して動作させようとしていたときのホールドオーバーでした。編集されました。 – Justin
私はこれも試みましたが(それ以来実際にはplyrをそれ以上使用していないので)、要約と一緒に動作させる方法も理解できませんでした。 –
それはおそらくこの状況でsummarise
を避け、ジャスティンが示されているように、独自の匿名関数を記述するためにクリーン(かつ安全)となりますが、これは、動作しているように見えます。
yr <- "year"
summarise(baseball,
duration = max(eval(parse(text = yr))) - min(eval(parse(text = yr))))
@David Arenburgが言ったように、この質問はかなり古いです。今日、data.table
またはdplyr
パッケージは、あなたにはるかに速いスピードで同じ結果を与えることができます。
答えはdata.table
です。
library(data.table)
my.fun <- function(myData, MyGrouping, myColumnName) {
setDT(myData)[, lapply(.SD, sum), by=MyGrouping, .SDcols=myColumnName]
}
私はを集計してを動作する方法を見つけたと思います。私はRで環境に対処するには専門家だが、ここでは解決策がありますので、私は、私は理由を理解かはわからない:
> library(plyr)
>
>
>
> ###########################
> # Creating test DataFrame #
> ###########################
>
> x <- 1:15
>
> set.seed(1)
> y <- letters[1:3][sample(1:3, 15, replace = T)]
>
> df <- data.frame(x, y)
>
> ### check df
> df
x y
1 1 a
2 2 b
3 3 b
4 4 c
5 5 a
6 6 c
7 7 c
8 8 b
9 9 b
10 10 a
11 11 a
12 12 a
13 13 c
14 14 b
15 15 c
>
>
> #####################
> # auxiliar function #
> #####################
> evalString <- function(s) {
+ eval(parse(text = s), parent.frame())
+ }
>
>
> ### columnName input
> columnName <- 'x'
>
> ### call with columnName as input
> xMeans <- ddply(df,
+ 'y',
+ summarise,
+ mean = mean(evalString(columnName)))
>
>
> ### regular call to ddply
> xMeans2 <- ddply(df,
+ 'y',
+ summarise,
+ mean = mean(x))
>
>
> ### Compare Results
> xMeans
y mean
1 a 7.8
2 b 7.2
3 c 9.0
> xMeans2
y mean
1 a 7.8
2 b 7.2
3 c 9.0
>
はEDIT:示唆したようにあなたは、基本パッケージからget
機能を使用することができますここでは:ddply: how do I pass column names as parameters?
> xMeans3 <- ddply(df,
+ 'y',
+ summarise,
+ mean = mean(get(columnName)))
>
> xMeans3
y mean
1 a 7.8
2 b 7.2
3 c 9.0
再現可能な例がありますか? –
@static_rttiあなたは具体的に 'plyr'答えをお探しですか?この質問は非常に古く、最近では高度なパッケージがあります。 –
さて、私はplyrを使っています(さらに高度なパッケージについてはわかりませんが)。別のパッケージで同じ問題に答えることができれば、面白いと思います。 –