質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

2回答

891閲覧

全国の学校データにおいて各変量の最小値, 最大値, 平均, 分散, 最大値を取るときの年を求め, 表を作成したい

wagashi_157

総合スコア51

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2021/10/18 15:14

編集2021/10/25 05:38

#実現したいこと・分からないこと
政府統計の総合窓具日「e-Stat」から学校数のデータを使い(school.csv), 変量として幼稚園, 幼保連携型・認定こども園, 小学校, 中学校, 義務教育学校, 高等学校, 中等教育学校, 盲学校, 聾学校, 養護学校, 特別支援学校, 高等専門学校, 短期大学, 大学, 専修学校, 各種学校があります。また 区分は1948年から2018年までの年のデータがあります。それらを踏まえ, 各変量の最小値・最大値, 分散, 最大値を取るときの年を求めて表にまとめた形で表示させるプログラムを作成しているのですが, 何が原因で正しく表示されないのかが分かりません。
特に, 欠損値の扱いには慣れていないので教えてほしいです。

#####実行環境
R言語(64-bit)

###エラーメッセージ・実行プログラム

$Min V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 "10021" "1943" "20095" "10325" "22" "3575" "1" "70" "101" "0" "1013" "19" "149" "12" "1941" "1183" $Max V1 V2 ・・・ "幼稚園" "幼保連携型・認定こども園" ・・・ V15 V16 "専修学校" "各種学校" $Mean V1 V2 ・・・ V16 NA NA ・・・ NA $Var V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 1.646425e+07 7.482903e+05 2.881855e+06 1.472105e+06 3.380000e+02 1.650591e+05 3.570351e+02 7.715956e+00 7.496786e+01 1.106081e+05 V11 V12 V13 V14 V15 V16 1.826855e+03 5.530617e+01 1.539668e+04 3.929075e+04 2.632083e+05 6.687492e+06 $M 幼稚園 幼保連携型・認定こども園 小学校 中学校 義務教育学校 高等学校 最小値 "10021" "1943" "20095" "10325" "22" "3575" 最大値 "幼稚園" "幼保連携型\n認定こども園" "小学校" "中学校" "義務教育学校" "高等学校" 平均 NA NA NA NA NA NA 分散 "16464253.6664596" "748290.333333333" "2881855.38322981" "1472104.57743271" "338" "165059.086749482" 中等教育学校 盲学校 聾学校 養護学校 特別支援学校 高等専門学校 最小値 "1" "70" "101" "0" "1013" "19" 最大値 "中等教育学校" "盲学校" "聾学校" "養護学校" "特別支援学校" "高等専門学校" 平均 NA NA NA NA NA NA 分散 "357.035087719298" "7.71595558153127" "74.9678550555231" "110608.133255406" "1826.85454545455" "55.3061688311688" 短期大学 大学 専修学校 各種学校 最小値 "149" "12" "1941" "1183" 最大値 "短期大学" "大学" "専修学校" "各種学校" 平均 NA NA NA NA 分散 "15396.6819578578" "39290.750310559" "263208.316492451" "6687491.59337474" 32 件の警告がありました (警告を見るには warnings() を使って下さい) > warnings() 警告メッセージ: 1: In mean.default(newX[, i], ...) : 引数は数値でも論理値でもありません。NA 値を返します 2: In mean.default(newX[, i], ...) : 引数は数値でも論理値でもありません。NA 値を返します ・・・・・・ 16: In mean.default(newX[, i], ...) : 引数は数値でも論理値でもありません。NA 値を返します 17: In FUN(newX[, i], ...) : 強制変換により NA が生成されました ・・・・・・ 32: In FUN(newX[, i], ...) : 強制変換により NA が生成されました

R

1function () 2{ 3 s=read.table("school.csv",sep=",",na.strings="…") 4 Min=apply(s[1:71,1:16],2,min,na.rm=TRUE) 5 Max=apply(s[1:71,1:16],2,max,na.rm=TRUE) 6 Mean=apply(s[1:71,1:16],2,mean,na.rm=TRUE) 7 Var=apply(s[1:71,1:16],2,var,na.rm=TRUE) 8 print(list(Min=Min,Max=Max,Mean=Mean,Var=Var)) 9 M=rbind(Min,Max,Mean,Var) 10 colnames(M)=c("幼稚園","幼保連携型・認定こども園","小学校","中学校","義務教育学校","高等学校","中等教育学校","盲学校","聾学校","養護学校","特別支援学校","高等専門学校","短期大学","大学","専修学校","各種学校") 11 rownames(M)=c("最小値","最大値","平均","分散") 12 return(list(M=M)) 13}

school.csvの内容
|幼稚園|幼保連携型・認定こども園|小学校|中学校|義務教育学校|高等学校|中等教育学校|盲学校|聾学校|養護学校|特別支援学校|高等専門学校|短期大学|大学|専修学校|各種学校|区分|
|:--|:--:|--:|
|1529|… |25237|16285|…|3575|…|74|64|0|…|…|…|12|…|1405|1948|
|1787|…|25638|14200|…|4180|…|74|78|1|…|…|…|178|…|3402|49|
|2100|…|25878|14165|…|4292|…|76|82|3|…|…|149|201|…|4190|50|
|2455|…|26056|13836|…|4477|…|76|84|3|…|…|180|203|…|5144|51|
|2874|…|26377|13748|…|4506|…|77|86|3|…|…|205|220|…|5674|52|
|3490|…|26555|13685|…|4572|…|78|92|5|…|…|228|226|…|6071|53|
|4471|…|26804|13773|…|4606|…|77|96|5|…|…|251|227|…|6741|54|
|5426|…|26880|13767|…|4607|…|77|99|5|…|…|264|228|…|7305|55|
|6141|…|26957|13724|…|4575|…|77|99|10|…|…|268|228|…|7732|56|
|6620|…|26988|13622|…|4577|…|76|101|19|…|…|269|231|…|8075|57|
|6837|…|26964|13392|…|4586|…|76|103|26|…|…|269|234|…|8015|58|
|7030|…|26916|13135|…|4615|…|76|102|38|…|…|272|239|…|8033|59|
|7207|…|26858|12986|…|4598|…|76|103|46|…|…|280|245|…|8089|60|
|7359|…|26741|12849|…|4602|…|76|103|64|…|…|290|250|…|8061|61|
|7520|…|26615|12647|…|4637|…|78|105|86|…|19|305|260|…|7952|62|
|7687|…|26423|12502|…|4811|…|77|105|107|…|34|321|270|…|7940|63|
|8022|…|26210|12310|…|4847|…|77|106|126|…|46|339|291|…|7931|64|
|8551|…|25977|12079|…|4849|…|77|107|151|…|54|369|317|…|7837|65|
|9083|…|25687|11851|…|4845|…|77|108|168|…|54|413|346|…|7897|66|
|9588|…|25487|11684|…|4827|…|75|107|192|…|54|451|369|…|7925|67|
|10021|…|25262|11463|…|4817|…|75|107|206|…|60|468|377|…|7991|68|
|10418|…|25013|11278|…|4817|…|75|107|224|…|60|473|379|…|8024|69|
|10796|…|24790|11040|…|4798|…|75|108|234|…|60|479|382|…|8011|70|
|11180|…|24540|10839|…|4791|…|75|108|255|…|63|486|389|…|8056|71|
|11564|…|24325|10686|…|4810|…|75|108|276|…|63|491|398|…|8045|72|
|12186|…|24592|10836|…|4862|…|76|108|316|…|63|500|405|…|8035|73|
|12686|…|24606|10802|…|4916|…|77|107|368|…|63|505|410|…|7999|74|
|13106|…|24650|10751|…|4946|…|77|107|393|…|65|513|420|…|7956|75|
|13492|…|24717|10719|…|4978|…|77|107|419|…|65|511|423|893|7000|76|
|13855|…|24777|10723|…|5028|…|76|107|452|…|65|515|431|1941|6094|77|
|14229|…|24828|10778|…|5098|…|73|110|502|…|64|519|433|2253|5737|78|
|14627|…|24899|10746|…|5135|…|73|110|654|…|62|518|443|2387|5508|79|
|14893|…|24945|10780|…|5208|…|73|110|677|…|62|517|446|2520|5302|80|
|15059|…|25005|10810|…|5219|…|72|110|695|…|62|523|451|2745|5027|81|
|15152|…|25043|10879|…|5213|…|72|110|700|…|62|526|455|2804|4867|82|
|15189|…|25045|10950|…|5369|…|72|110|713|…|62|532|457|2860|4674|83|
|15211|…|25064|11047|…|5427|…|72|110|720|…|62|536|460|2936|4474|84|
|15220|…|25040|11131|…|5453|…|72|107|733|…|62|543|460|3015|4300|85|
|15189|…|24982|11190|…|5491|…|70|107|741|…|62|548|465|3088|4124|86|
|15156|…|24933|11230|…|5508|…|70|107|747|…|62|561|474|3151|3918|87|
|15115|…|24901|11266|…|5512|…|70|107|754|…|62|571|490|3191|3685|88|
|15080|…|24851|11264|…|5511|…|70|108|760|…|62|584|499|3254|3570|89|
|15076|…|24827|11275|…|5506|…|70|108|769|…|62|593|507|3300|3436|90|
|15041|…|24798|11290|…|5503|…|70|107|783|…|63|592|514|3370|3309|91|
|15006|…|24730|11300|…|5501|…|70|107|786|…|62|591|523|3409|3202|92|
|14958|…|24676|11292|…|5501|…|70|107|787|…|62|595|534|3431|3055|93|
|14901|…|24635|11289|…|5497|…|70|107|791|…|62|593|552|3437|2934|94|
|14856|…|24548|11274|…|5501|…|70|107|790|…|62|596|565|3476|2821|95|
|14790|…|24482|11269|…|5496|…|71|107|797|…|62|598|576|3512|2714|96|
|14690|…|24376|11257|…|5496|…|71|107|800|…|62|595|586|3546|2601|97|
|14603|…|24295|11236|…|5493|…|71|107|805|…|62|588|604|3573|2482|98|
|14527|…|24188|11220|…|5481|1|71|107|810|…|62|585|622|3565|2361|99|
|14451|…|24106|11209|…|5478|4|71|107|814|…|62|572|649|3551|2278|2000|
|14375|…|23964|11191|…|5479|7|71|107|818|…|62|559|669|3495|2164|1|
|14279|…|23808|11159|…|5472|9|71|106|816|…|62|541|686|3467|2069|2|
|14174|…|23633|11134|…|5450|16|71|106|818|…|63|525|702|3439|1955|3|
|14061|…|23420|11102|…|5429|18|71|106|822|…|63|508|709|3444|1878|4|
|13949|…|23123|11035|…|5418|19|71|106|825|…|63|488|726|3439|1830|5|
|13835|…|22878|10992|…|5385|27|71|104|831|…|64|468|744|3441|1729|6|
|13723|…|22693|10955|…|5313|32|…|…|…|1013|64|434|756|3435|1654|7|
|13626|…|22476|10915|…|5243|37|…|…|…|1026|64|417|765|3401|1585|8|
|13516|…|22258|10864|…|5183|42|…|…|…|1030|64|406|773|3348|1533|9|
|13392|…|22000|10815|…|5116|48|…|…|…|1039|58|395|778|3311|1466|10|
|13299|…|21721|10751|…|5060|49|…|…|…|1049|57|387|780|3266|1426|11|
|13170|…|21460|10699|…|5022|49|…|…|…|1059|57|372|783|3249|1392|12|
|13043|…|21131|10628|…|4981|50|…|…|…|1080|57|359|782|3216|1330|13|
|12905|…|20852|10557|…|4963|51|…|…|…|1096|57|352|781|3206|1276|14|
|11674|1943|20601|10484|…|4939|52|…|…|…|1114|57|346|779|3201|1229|15|
|11252|2822|20313|10404|22|4925|52|…|…|…|1125|57|341|777|3183|1200|16|
|10878|3673|20095|10325|48|4907|53|…|…|…|1135|57|337|780|3172|1183|17|
|10474|4466|19892|10270|82|4897|53|…|…|…|1141|57|331|782|3160|1164|18|

##試したこと
欠損値に留意しなければならないため, na.rmを最後においてtrueに設定しました。以前s[!is.na(s)]という書き方を試しましたが, 失敗しました。最後の区分は最小値などの計算対象にならないため, -c[(17)]をsの中に書きましたが, 上手くいきませんでした。

###本来実現したい実行結果

幼稚園 幼保連携型. 認定こども園 小学校 中学校  義務教育学校 最小値 1529.00 1943 19892.00 10270.00 22.00000 最大値 15220.00 4466 26988.00 16285.00 82.00000 平均 11460.92 3226 24507.54 11628.72 50.66667 分散16243163.14 1182238 3149364.54 1477824.35 905.33333 最大値の年85.00 18 57.00 1948.00 18.00000 高等学校 中等教育学校 盲学校 聾学校 養護学校 特別支援学校 最小値 3575.000 1.0000 70.000000 64.00000 0.0000 1013.000 最大値 5512.000 53.0000 78.000000 110.00000 831.0000 1141.000 平均 5038.394 33.4500 73.644068 103.77966 445.0678 1075.583 分散162990.785 359.4184 7.715956 74.96786 110608.1333 2085.174 最大値の年88.000 18.0000 62.000000 84.00000 6.0000 18.000     高等専門学校 短期大学 大学 専修学校 各種学校 最小値 19.00000 149.0000 12.0000 893.000 1164.000 最大値 65.00000 598.0000 783.0000 3573.000 8089.000 平均 59.64912 443.5652 480.3662 3141.419 4606.648 分散 54.44612 15359.3376 40047.7783 256949.868 6763686.517 最大値の年 77.00000 96.0000 12.0000 98.000 60.000

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2021/10/21 03:45

school.csvの冒頭数行を質問に追記してもらえませんか。 明らかに、$Mや$MAXがおかしく、NAの処理どうこう言う以前にデータ取り込みに問題があると思いますが、追試できません。
wagashi_157

2021/10/21 14:09

csvファイルの内容が分かりづらく申し訳ありません。 イメージを画像で貼ったので確認をお願いします。
KojiDoi

2021/10/21 17:42

画像じゃダメです。テキストを貼り付けてください。
guest

回答2

0

ベストアンサー

「R」は使ったことがないので参考程度ですが…
と言いつつ「初めてのR」ということで見よう見まねで試してみました。

まず、e-Statのサイトから元データを確認してみました。
おそらく元のデータは「学校基本調査 総括表/1/学校数」のnen01.xlsxファイルではないかと思います。そして,エクセル上で加工してCSVファイルにしたと推測できます。

エクセル上で不要なデータのみを除いてCSVで保存してみました。次のようになります。

csv

1幼稚園,"幼保連携型 2認定こども園",小学校,中学校,"義務教育 3学校",高等学校,中等教育  学校,盲学校,聾学校,養護学校,特別支援  学校,高等専門  学校,短期大学,大学,専修学校,各種学校 4"1,529",…,"25,237","16,285",…,"3,575",…,74,64,−,…,…,…,12,…,"1,405" 5"1,787",…,"25,638","14,200",…,"4,180",…,74,78,1,…,…,…,178,…,"3,402" 6"2,100",…,"25,878","14,165",…,"4,292",…,76,82,3,…,…,149,201,…,"4,190" 7"2,455",…,"26,056","13,836",…,"4,477",…,76,84,3,…,…,180,203,…,"5,144" 8~以下略~

どうやら3桁区切りの数値が文字列みたいに保存されているようです。
おそらくこのあたりが一つおかしい原因と思われます。

また,10列目のデータの先頭に-があります。これも変になる原因のようです。

まずは,エクセルデータのCSV保存の方法を一工夫しましょう。
エクセルデータ範囲の左上の四角をクリックするとデータ全てが選択できるのでこの状態で書式を変更します。書式は「標準」を選びます。

これで,数値の三桁区切りがなくなるので,CSVで保存します。

csv

1幼稚園,"幼保連携型 2認定こども園",小学校,中学校,"義務教育 3学校",高等学校,中等教育  学校,盲学校,聾学校,養護学校,特別支援  学校,高等専門  学校,短期大学,大学,専修学校,各種学校 41529,…,25237,16285,…,3575,…,74,64,−,…,…,…,12,…,1405 51787,…,25638,14200,…,4180,…,74,78,1,…,…,…,178,…,3402 62100,…,25878,14165,…,4292,…,76,82,3,…,…,149,201,…,4190 7~以下略~

そして-は全体で一つだけなので手でに変更してしまいましょう。

csv

1幼稚園,"幼保連携型 2認定こども園",小学校,中学校,"義務教育 3学校",高等学校,中等教育  学校,盲学校,聾学校,養護学校,特別支援  学校,高等専門  学校,短期大学,大学,専修学校,各種学校 41529,…,25237,16285,…,3575,…,74,64,…,…,…,…,12,…,1405 51787,…,25638,14200,…,4180,…,74,78,1,…,…,…,178,…,3402 62100,…,25878,14165,…,4292,…,76,82,3,…,…,149,201,…,4190 7~以下略~

質問者の出力結果からヘッダー行が1行目のデータとして読み込まれているのは確実なので,header読み込みフラグを明示します。

R

1s=read.table("school-3.csv",sep=",",na.strings="…",header=TRUE) 2Min=apply(s[1:71,1:16],2,min,na.rm=TRUE) 3Max=apply(s[1:71,1:16],2,max,na.rm=TRUE) 4Mean=apply(s[1:71,1:16],2,mean,na.rm=TRUE) 5Var=apply(s[1:71,1:16],2,var,na.rm=TRUE) 6print(list(Min=Min,Max=Max,Mean=Mean,Var=Var)) 7M=rbind(Min,Max,Mean,Var) 8colnames(M)=c("幼稚園","幼保連携型・認定こども園","小学校","中学校","義務教育学校","高等学校","中等教育学校","盲学校","聾学校","養護学校","特別支援学校","高等専門学校","短期大学","大学","専修学校","各種学校") 9rownames(M)=c("最小値","最大値","平均","分散")
> M 幼稚園 幼保連携型・認定こども園 小学校 中学校 義務教育学校 最小値 1529.00 1943.00 19892.00 10270.00 0.000 最大値 15220.00 4521.00 26988.00 16285.00 82.000 平均 11460.92 3239.75 24507.54 11628.72 38.000 分散 16243163.14 1228460.92 3149364.54 1477824.35 1245.333 高等学校 中等教育学校 盲学校 聾学校 養護学校 特別支援学校 最小値 3575.000 1.0000 70.000000 64.00000 1.0000 1013.000 最大値 5512.000 53.0000 78.000000 110.00000 831.0000 1141.000 平均 5038.394 33.4500 73.644068 103.77966 452.7414 1075.583 分散 162990.785 359.4184 7.715956 74.96786 109013.5284 2085.174 高等専門学校 短期大学 大学 専修学校 各種学校 最小値 19.00000 149.0000 12.0000 893.000 1164.000 最大値 65.00000 598.0000 783.0000 3573.000 8089.000 平均 59.64912 443.5652 480.3662 3141.419 4606.648 分散 54.44612 15359.3376 40047.7783 256949.868 6763686.517

結果が出てきたようです。

まあぶっちゃけKojiDoiさんの修正依頼がまさにその通りですが,
質問されている方の感じでは何を言っているのかよく理解できなかったのではないでしょうか?

この辺りはエクセルでCSV変換すると実際にどのように変換されるかを
テキストエディタで色々なパターンで確認しておくと後々地雷をふまなくていいかと思います。

なお,apply関数だと一列ダメなデータがあれば全部ダメの結果になる(特にmean)ようなので,
少しずつ列を分けて確認した方がいいかと思います。(ここには記述していない確認を山ほどしています)

投稿2021/10/23 08:45

ujimushi_sradjp

総合スコア2152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wagashi_157

2021/10/24 06:35 編集

上手くいきました。ありがとうございました。 もう1つ質問いいですか。 求めた4つの変量についで最大値を取るときの年を求めたいのですが, order関数を使うところまでは分かっているもののどのように表したら良いか分かりません。 一応 Max_y=apply(s[1:71,1:16],2,order(s)[71],na.rm=TRUE) でやってみたのですが上手くいきませんでした。どのように表したら上手くいくか教えていただけませんか。 宜しくお願いします。
guest

0

添付されたデータを見ると、少なくとも以下の2つの行が変です。

9588 … 25487 11684 … 4827 … 75 107192 … 54 451 369 … 7925 67 11674 1943 20601 10484 … 4939 52 … … … 1114 57 346 779 3201 1229 15

おそらくエクセルの取り込むときに位置を間違えたかテキストに変換する際の編集ミスを犯したかで、本来あるべき区切り文字のカンマが欠落しています。
また、NAを示す…記号の前後にスペースが入っていたりいなかったりバラバラです。

Rのプログラムについて悩むのは、こういうところをきちんとチェックして、ミスを修正し、ゴミを取り、入力データの形式を統一して、その後の話です。前処理をきちんと行うことは基本中の基本。

とりあえずエスパー能力を発揮して上記2行を多分こうだろうという形に修正して続けてみます。

当該データをデータフレームdfとして取り込み、中身をチェック。

> str(df) 'data.frame': 71 obs. of 17 variables: $ 幼稚園 : int 1529 1787 2100 2455 2874 3490 4471 5426 6141 6620 ... $ 幼保連携型.認定こども園: int NA NA NA NA NA NA NA NA NA NA ... $ 小学校 : int 25237 25638 25878 26056 26377 26555 26804 26880 26957 26988 ... $ 中学校 : int 16285 14200 14165 13836 13748 13685 13773 13767 13724 13622 ... $ 義務教育学校 : int NA NA NA NA NA NA NA NA NA NA ... $ 高等学校 : int 3575 4180 4292 4477 4506 4572 4606 4607 4575 4577 ... $ 中等教育学校 : int NA NA NA NA NA NA NA NA NA NA ... $ 盲学校 : int 74 74 76 76 77 78 77 77 77 76 ... $ 聾学校 : int 64 78 82 84 86 92 96 99 99 101 ... $ 養護学校 : int 0 1 3 3 3 5 5 5 10 19 ... $ 特別支援学校 : int NA NA NA NA NA NA NA NA NA NA ... $ 高等専門学校 : int NA NA NA NA NA NA NA NA NA NA ... $ 短期大学 : int NA NA 149 180 205 228 251 264 268 269 ... $ 大学 : int 12 178 201 203 220 226 227 228 228 231 ... $ 専修学校 : int NA NA NA NA NA NA NA NA NA NA ... $ 各種学校 : int 1405 3402 4190 5144 5674 6071 6741 7305 7732 8075 ... $ 区分 : int 1948 49 50 51 52 53 54 55 56 57 ...

多分正しいのだろうと仮定して、項目ごと(列ごと)の統計を取ります。データフレームを相手に列ごとに何かをしたいときは、ujimushi_sradjpさんが試みたようにapply()を使ってもいいのですが、普通はlapply()やsapply()を使うのが簡単でよいです。たとえば最大値はこうします。

> df.max <- sapply(df, max, na.rm=T) 幼稚園 幼保連携型.認定こども園 小学校 中学校 15220 4466 26988 16285 義務教育学校 高等学校 中等教育学校 盲学校 82 5512 53 78 聾学校 養護学校 特別支援学校 高等専門学校 110 831 1141 65 短期大学 大学 専修学校 各種学校 598 7793201 3573 8089 区分 2000

求めた4つの変量についで最大値を取るときの年を求めたい

得られた最大値を利用してデータフレームから行抽出を行えばよいでしょう。

df[!is.na(df[,"幼稚園"]) & df[,"幼稚園"]==df.max["幼稚園"],]

lapplyを利用して全項目で同様の処理を行い、結果をリストにまとめます。

df[!is.na(df[,"幼稚園"]) & df[,"幼稚園"]==df.max["幼稚園"],]

lapplyを利用して全項目で同様の処理を行い、結果をリストにまとめます。

res <- lapply(names(df), function(n){ df[!is.na(df[,n]) & df[,n]==df.max[n],] }) names(res) <- names(df)

投稿2021/10/24 15:21

KojiDoi

総合スコア13692

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問