මෙම ලිපියේ (ඉතා විශිෂ්ට) පිළිතුරු නොමැති බව by
සහ aggregate
පැහැදිලි කිරීම් නොමැති බව මම තේරුම් ගත් බැවින් . මෙන්න මගේ දායකත්වය.
විසින්
මෙම by
ලේඛගතකිරීම සඳහන් පරිදි කාර්යය, සඳහා "දවටනය" ලෙස, නමුත් විය හැකි tapply
. by
අපට tapply
හැසිරවිය නොහැකි කාර්යයක් ගණනය කිරීමට අවශ්ය වූ විට එහි බලය පැන නගී . එක් උදාහරණයක් නම් මෙම කේතය:
ct <- tapply(iris$Sepal.Width , iris$Species , summary )
cb <- by(iris$Sepal.Width , iris$Species , summary )
cb
iris$Species: setosa
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.300 3.200 3.400 3.428 3.675 4.400
--------------------------------------------------------------
iris$Species: versicolor
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.000 2.525 2.800 2.770 3.000 3.400
--------------------------------------------------------------
iris$Species: virginica
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.200 2.800 3.000 2.974 3.175 3.800
ct
$setosa
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.300 3.200 3.400 3.428 3.675 4.400
$versicolor
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.000 2.525 2.800 2.770 3.000 3.400
$virginica
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.200 2.800 3.000 2.974 3.175 3.800
අපි මෙම වස්තූන් දෙකක් මුද්රණය කිරීම, නම් ct
සහ cb
අපි "තේරුම වන්නේ" එකම ප්රතිඵල සහ එකම වෙනස්කම් ඔවුන් පෙන්වා ඇති ආකාරය සහ විවිධ වේ class
පිළිවෙළින්, උපලක්ෂණ by
සඳහා cb
සහ array
සඳහා ct
.
මා පවසා ඇති පරිදි, by
අපට භාවිතා කළ නොහැකි විට එහි බලය පැන නගී tapply
; පහත කේතය එක් උදාහරණයකි:
tapply(iris, iris$Species, summary )
Error in tapply(iris, iris$Species, summary) :
arguments must have same length
R පවසන්නේ තර්ක වලට එකම දිගක් තිබිය යුතු බවයි, “අපට අවශ්ය summary
සියලු විචල්යයන් iris
සාධකය ඔස්සේ ගණනය කිරීමට අවශ්යයි” යැයි පවසන්න Species
: නමුත් R ට එය කළ නොහැක්කේ එය හැසිරවිය යුතු ආකාරය නොදන්නා බැවිනි.
by
R ශ්රිතය සමඟ data frame
පන්තිය සඳහා නිශ්චිත ක්රමවේදයක් යවා summary
පළමු තර්කයේ දිග (සහ වර්ගය ද) වෙනස් වුවද ශ්රිතය ක්රියා කිරීමට ඉඩ දෙන්න .
bywork <- by(iris, iris$Species, summary )
bywork
iris$Species: setosa
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.300 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:4.800 1st Qu.:3.200 1st Qu.:1.400 1st Qu.:0.200 versicolor: 0
Median :5.000 Median :3.400 Median :1.500 Median :0.200 virginica : 0
Mean :5.006 Mean :3.428 Mean :1.462 Mean :0.246
3rd Qu.:5.200 3rd Qu.:3.675 3rd Qu.:1.575 3rd Qu.:0.300
Max. :5.800 Max. :4.400 Max. :1.900 Max. :0.600
--------------------------------------------------------------
iris$Species: versicolor
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.900 Min. :2.000 Min. :3.00 Min. :1.000 setosa : 0
1st Qu.:5.600 1st Qu.:2.525 1st Qu.:4.00 1st Qu.:1.200 versicolor:50
Median :5.900 Median :2.800 Median :4.35 Median :1.300 virginica : 0
Mean :5.936 Mean :2.770 Mean :4.26 Mean :1.326
3rd Qu.:6.300 3rd Qu.:3.000 3rd Qu.:4.60 3rd Qu.:1.500
Max. :7.000 Max. :3.400 Max. :5.10 Max. :1.800
--------------------------------------------------------------
iris$Species: virginica
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.900 Min. :2.200 Min. :4.500 Min. :1.400 setosa : 0
1st Qu.:6.225 1st Qu.:2.800 1st Qu.:5.100 1st Qu.:1.800 versicolor: 0
Median :6.500 Median :3.000 Median :5.550 Median :2.000 virginica :50
Mean :6.588 Mean :2.974 Mean :5.552 Mean :2.026
3rd Qu.:6.900 3rd Qu.:3.175 3rd Qu.:5.875 3rd Qu.:2.300
Max. :7.900 Max. :3.800 Max. :6.900 Max. :2.500
එය සැබවින්ම ක්රියාත්මක වන අතර ප්රති result ලය ඉතා පුදුම සහගතය. එය පන්තියේ වස්තුවක් by
ඔස්සේ බව Species
(ඔවුන් එක් එක් සඳහා, කියන්න) ගණනය summary
එක් එක් විචල්ය වන.
පළමු තර්කය a නම් data frame
, පිටත් කරන ලද ශ්රිතයට එම පන්තියේ වස්තු සඳහා ක්රමයක් තිබිය යුතු බව සලකන්න . නිදසුනක් ලෙස, අපි මෙම කේතය mean
ශ්රිතය සමඟ භාවිතා කරන්නේ කිසිසේත්ම තේරුමක් නැති මෙම කේතය අපට ඇත:
by(iris, iris$Species, mean)
iris$Species: setosa
[1] NA
-------------------------------------------
iris$Species: versicolor
[1] NA
-------------------------------------------
iris$Species: virginica
[1] NA
Warning messages:
1: In mean.default(data[x, , drop = FALSE], ...) :
argument is not numeric or logical: returning NA
2: In mean.default(data[x, , drop = FALSE], ...) :
argument is not numeric or logical: returning NA
3: In mean.default(data[x, , drop = FALSE], ...) :
argument is not numeric or logical: returning NA
සමස්ථ
aggregate
tapply
අප එය එලෙස භාවිතා කරන්නේ නම් එය වෙනත් භාවිත ක්රමයක් ලෙස දැකිය හැකිය .
at <- tapply(iris$Sepal.Length , iris$Species , mean)
ag <- aggregate(iris$Sepal.Length , list(iris$Species), mean)
at
setosa versicolor virginica
5.006 5.936 6.588
ag
Group.1 x
1 setosa 5.006
2 versicolor 5.936
3 virginica 6.588
වහාම වෙනස්කම් දෙකක් දෙවන තර්කය වේ aggregate
යුතුය අතර ලැයිස්තුවක් විය tapply
හැකි (අනිවාර්ය නොවේ) ලැයිස්තුවක් විය හා ප්රතිදානය බව aggregate
අතර වූ එක් දත්ත රාමුවක් tapply
යනු array
.
එහි බලය aggregate
වන්නේ එයට දත්තවල උප කුලක පහසුවෙන් subset
තර්කයෙන් හැසිරවිය හැකි බවත් එයට ts
වස්තූන් සඳහා ක්රමවේදයන් ඇති බවත් ය formula
.
මෙම මූලද්රව්ය සමහර අවස්ථාවන්හිදී aggregate
ඒ සමඟ වැඩ කිරීම පහසු කරයි tapply
. මෙන්න උදාහරණ කිහිපයක් (ප්රලේඛනයෙන් ලබා ගත හැකිය):
ag <- aggregate(len ~ ., data = ToothGrowth, mean)
ag
supp dose len
1 OJ 0.5 13.23
2 VC 0.5 7.98
3 OJ 1.0 22.70
4 VC 1.0 16.77
5 OJ 2.0 26.06
6 VC 2.0 26.14
අපට එය සාක්ෂාත් කරගත හැකි tapply
නමුත් වාක්ය ඛණ්ඩය තරමක් අමාරු වන අතර ප්රතිදානය (සමහර තත්වයන් යටතේ) කියවිය නොහැකි තරම්:
att <- tapply(ToothGrowth$len, list(ToothGrowth$dose, ToothGrowth$supp), mean)
att
OJ VC
0.5 13.23 7.98
1 22.70 16.77
2 26.06 26.14
අපට භාවිතා කළ නොහැකි by
හෝ භාවිතා කළ යුතු වෙනත් අවස්ථා tapply
තිබේ aggregate
.
ag1 <- aggregate(cbind(Ozone, Temp) ~ Month, data = airquality, mean)
ag1
Month Ozone Temp
1 5 23.61538 66.73077
2 6 29.44444 78.22222
3 7 59.11538 83.88462
4 8 59.96154 83.96154
5 9 31.44828 76.89655
අපට පෙර tapply
ඇමතුමකින් පෙර ප්රති result ලය ලබා ගත නොහැකි නමුත් Month
එක් එක් මූලද්රව්යයන් සඳහා මධ්යන්යය ගණනය කර ඒවා ඒකාබද්ධ කළ යුතුය (තවද අප ඇමතිය යුතු බව සලකන්න na.rm = TRUE
, මන්ද ශ්රිතයේ formula
ක්රම aggregate
පෙරනිමියෙන් ඇති නිසා na.action = na.omit
):
ta1 <- tapply(airquality$Ozone, airquality$Month, mean, na.rm = TRUE)
ta2 <- tapply(airquality$Temp, airquality$Month, mean, na.rm = TRUE)
cbind(ta1, ta2)
ta1 ta2
5 23.61538 65.54839
6 29.44444 79.10000
7 59.11538 83.90323
8 59.96154 83.96774
9 31.44828 76.90000
සමග වන අතර by
අපි ළඟාකර ගත නොහැකි ඇත්ත පහත සඳහන් කාර්යය ඇමතුමක් දෝෂයක් නැවත බව (නමුත්, බොහෝ දුරට එය කර්මයක් කාර්යය හා සම්බන්ධ වේ, mean
):
by(airquality[c("Ozone", "Temp")], airquality$Month, mean, na.rm = TRUE)
වෙනත් වේලාවක ප්රති results ල සමාන වන අතර වෙනස්කම් පන්තියේ පමණක් වේ (ඉන්පසු එය පෙන්වන ආකාරය / මුද්රණය කර ඇති ආකාරය පමණක් නොව - උදාහරණයක් ලෙස, එය උප කුලක කරන්නේ කෙසේද) වස්තුව:
byagg <- by(airquality[c("Ozone", "Temp")], airquality$Month, summary)
aggagg <- aggregate(cbind(Ozone, Temp) ~ Month, data = airquality, summary)
පෙර කේතය එකම ඉලක්කයක් හා ප්රති results ල අත්කර ගනී, සමහර අවස්ථාවලදී භාවිතා කළ යුතු මෙවලම පුද්ගලික රුචි අරුචිකම් හා අවශ්යතා පමණක් වේ; පෙර වස්තූන් දෙක උප කුලකයට වඩා වෙනස් අවශ්යතා ඇත.
*apply()
හාby
. ප්ලයර් (අවම වශයෙන් මට) වඩා ස්ථාවර බවක් පෙනේ, එය අපේක්ෂා කරන දත්ත ආකෘතිය කුමක්ද සහ එය කෙළ ගසන්නේ කුමක් දැයි මම සැමවිටම දනිමි. ඒකෙන් මට ගොඩක් කරදර වෙනවා.