私は現在、農業データの大きな(ish)データフレーム(13,884行と57列)を扱っています。1つの列内の一意の行と2)特定の他の列のすべての値
データフレームの1つの列は、対象国の「地区」の名前で構成されています。また、複数作物の「生産下総面積」欄と、各調査に対応する「年」欄も含まれています。データフレームの簡易版:
Dist_names <- c('A', 'B', 'C', 'D')
Rice_area <- rnorm(16, mean = 5, sd = 1)
Random_var <- rep('blah', times = 16)
Maize_area <- rnorm(16, mean = 3, sd = 1)
Random_var1 <- rep('blah', times = 16)
Wheat_area <- rnorm(16, mean = 7, sd = 1)
Year <- c(rep('1966', times = 4), rep('1971', times = 4),
rep('1984', times = 4), rep('1996', times = 4))
df_ag <- data.frame(Dist_names,
Rice_area,
Random_var,
Maize_area,
Random_var1,
Wheat_area,
Year)
df_ag
Dist_names Rice_area Random_var Maize_area Random_var1 Wheat_area Year
1 A 6.266559 blah 3.8740517 blah 7.775330 1966
2 B 5.611816 blah 1.9078029 blah 7.497784 1966
3 C 5.481312 blah 2.2931361 blah 6.556777 1966
4 D 3.982654 blah 2.2146227 blah 6.899663 1966
5 A 6.123487 blah 2.3746220 blah 6.537040 1971
6 B 6.760871 blah 2.6296762 blah 6.994326 1971
7 C 5.123877 blah 3.3364304 blah 7.348202 1971
8 D 5.340764 blah 3.3026722 blah 6.316179 1971
9 A 5.005836 blah 2.6335372 blah 7.031141 1984
10 B 4.224905 blah 4.4294862 blah 7.822868 1984
11 C 5.297800 blah 2.3048798 blah 4.287632 1984
12 D 7.870687 blah 1.5812036 blah 6.171034 1984
13 A 4.575766 blah 0.3331641 blah 6.971024 1996
14 B 5.717461 blah 2.7911101 blah 7.396314 1996
15 C 4.679965 blah 3.0742187 blah 5.575169 1996
16 D 3.892069 blah 2.5029748 blah 7.660881 1996
そうで、私は何をしようとしてることはyear
変数の機能、およびプロットとして各crop_area
変数の線形モデルを作成し、dist_names
変数をループしています出力はabline()
と一緒に出力されます。この作業を自動化する必要があります。これは332の固有の地区名があり、28の作物= 9296のプロットが生成されるためです。
私は、単一の作物の変数をループすることができるよと、次のようなコード使用してビジュアルを生成します。しかし、私はやることができるようにするためのコードを一般に困難な時期を過ごしてい
par(ask=TRUE)
dists <- unique(df_ag$Dist_names)
for (dis in dists) {
dat <- df_ag[df_ag$Dist_names == dis, ]
m <- lm(Rice_area ~ Year, data = dat)
plot(dat$Year, dat$Rice_area, main=paste0(dat$Dist_name[1], ', ', dis))
abline(m)
}
を上記のすべてのcrop_area
変数と同じことです。私の現在の考え方は、ネストされたループfor
で構成される関数が必要であるということです。最新の(動作しない)試みは次のとおりです:
par(ask=TRUE)
graph_fun <- function(df, na.rm = TRUE) {
# find unique districts within dist_names
dists <- unique(df_ag$Dist_names)
# total area variables in data frame
ta_vars <- df_ag[grepl("area", names(df_ag))]
# loop through each district name
for (dis in dists) {
# loop through each crop variable
for (i in 1:ncol(ta_vars)) {
# new variable with each district and each crop
dat <- df_ag[df_ag$Dist_names == dis, ta_vars[i]]
}
# generate linear models and plots
m <- lm(dat[j], Year, data = dat)
plot(dat$Year, dat[j], main=paste0(dat$Dist_names[1], ', ', dis,))
abline(m)
}
}
もちろん、上記のコードはトリックを行いません。 xの
エラー[J]:無効な添字タイプ「リスト」
どれでも私は、コードが間違っている、複数の領域があると確信しているが、私は現在、次のエラーを取得しています指導は非常に高く評価されるだろう。私は誰もがapply
ファミリ機能でタスクを達成する方法を考えることができる場合、for
ループコンセプトと結婚していません。
「crop_area」とは何ですか? Rice_area〜Year、Maize_area〜Year、Wheat_area〜Yearのモデルをやっているのですか? –
'ta_vars'にはエリア変数の名前を入れたいと思いますが、ここではそれはカラムです。あなたは 'ta_vars < - df_ag [grepl(" area "、names(df_ag))]' 'を' ta_vars < - names(df_ag)[grepl( "area"、names(df_ag))] 'に置き換えてみてください。 (訳注:私は1:長さ(ta_vars))のためのループ呼び出し '' –
また、あなたは確かに 'broom'パッケージを見てください。 –