ddply
を使用してdata.frameの一部を要約すると、数値データになる式だけが含まれていても問題ありません。しかし、数値データと文字データの両方を含む式を含めると、すべての出力列が文字になります。私は決して予測せず、実際にコードを下流に掘り下げてしまいました。このことから数値から文字へのPlyrの変更
library(plyr)
set.seed(1234)
data <- data.frame(x = 1:25,
y = c((1:25)*4 + rnorm(100, mean = 0, sd = 50),
(1:25)*4 + rnorm(100, mean = 0, sd = 1000)),
category = c(rep("stuff with a stronger correlation", 100),
rep("stuff with a weaker correlation", 100)))
lmresults <- ddply(data, "category", function(df) c(
slope = coef(lm(df$y ~ df$x))[2],
pval = signif(summary(lm(df$y ~ df$x))$coef[2, "Pr(>|t|)"], 2)
))
str(lmresults)
出力:「傾き」と「PVAL」の両方の数値であることを
'data.frame': 2 obs. of 3 variables:
$ category : Factor w/ 2 levels "stuff with a stronger correlation",..: 1 2
$ slope.df$x: num 4.15 12.31
$ pval : num 3.7e-09 3.7e-01
注ここで私が話しているかの再現性の例です。私がしなければしかし、この:
lmresults2 <- ddply(data, "category", function(df) c(
pval = signif(summary(lm(df$y ~ df$x))$coef[2, "Pr(>|t|)"], 2),
slope = paste("slope =", signif(coef(lm(df$y ~ df$x))[2], 2))
))
str(lmresults2)
出力は次のようになります。
'data.frame': 2 obs. of 3 variables:
$ category: Factor w/ 2 levels "stuff with a stronger correlation",..: 1 2
$ pval : chr "3.7e-09" "0.37"
$ slope : chr "slope = 4.1" "slope = 12"
私は文字であることをslope
を期待していたが、突然pval
も、キャラクターです!
これはバグのプライヤーにありますか?それはすべてのデータに同じクラスを持たなければならないマトリックスに出力を変換していますか?しかし、その場合、なぜオブジェクトのクラスlmresults2
はまだ "data.frame"ですか?
plyr!= dplyr;これは元のように見えます。 – alistaire