Saya mencoba untuk menghapus satu kolom tetapi saya tidak bisa.

Untuk konteks, saya mencoba menghitung statistik ringkasan tertentu menggunakan data dalam format berikut:

  State Year G1.Institutions
Alabama-1935 Alabama 1935              NA
Alabama-1936 Alabama 1936       0.4830918
Alabama-1937 Alabama 1937       0.0000000
Alabama-1938 Alabama 1938       0.0000000
Alabama-1939 Alabama 1939       0.4807692
Alabama-1940 Alabama 1940       0.0000000

Dari data di atas saya membuat tabel baru menggunakan:

descriptives<-aggregate(G1.Institutions~ State, grow_us, mean)
descriptives$sd<-aggregate(G1.Institutions ~ State, grow_us, sd)
y1935 <-panel_data[panel_data$Year %in% c(1935  ), ] 
y2019 <-panel_data[panel_data$Year %in% c(2019  ), ] 
descriptives$y1935<-y1935$Institutions
descriptives$y2019<-y2019$Institutions
descriptives$change<-descriptives$y2019-descriptives$y1935  
descriptives

Yang kemudian memberi saya hasil berikut:

   State G1.Institutions   sd.State sd.G1.Institutions y1935 y2019 change
1    Alabama      -0.7513443    Alabama           2.868676   207   106   -101
2     Alaska       1.5304305     Alaska          11.986212     2     4      2
3    Arizona       0.6237702    Arizona          11.817228    15    14     -1
4   Arkansas      -1.0421333   Arkansas           2.492121   213    86   -127
5 California      -0.4250102 California           7.484268   245   137   -108
6   Colorado      -0.7262110   Colorado           5.486192   141    67    -74

Sekarang masalahnya di sini adalah bahwa fungsi agregat membuat kolom sd.state yang berlebihan dan saya ingin menyingkirkannya. Dan di sinilah masalah dimulai, ini biasanya akan menjadi pengoperasian yang mudah tetapi tidak. Saya mencoba menghapus kolom menggunakan:

descriptives = subset(descriptives, select = -c(3) )

Ini menyingkirkan kolom 3 tetapi menariknya butuh kolom 4 dengan itu serta sekarang data terlihat seperti ini:

                  State G1.Institutions y1935 y2019 change
1               Alabama      -0.7513443   207   106   -101
2                Alaska       1.5304305     2     4      2
3               Arizona       0.6237702    15    14     -1
4              Arkansas      -1.0421333   213    86   -127

Saya mencoba juga beberapa metode umum untuk menghapus kolom seperti:

descriptives = descriptives[,!(names(descriptives) %in% 'sd.State')]

Menariknya kode berjalan tanpa kesalahan tetapi tidak berpengaruh:

                  State G1.Institutions             sd.State sd.G1.Institutions y1935 y2019 change
1               Alabama      -0.7513443              Alabama           2.868676   207   106   -101
2                Alaska       1.5304305               Alaska          11.986212     2     4      2
3               Arizona       0.6237702              Arizona          11.817228    15    14     -1
4              Arkansas      -1.0421333             Arkansas           2.492121   213    86   -127

Saya selanjutnya mencoba:

descriptives$sd.State <- NULL

Tetapi untuk beberapa alasan yang mengatur bingkai data ke nol, bukan hanya satu kolom itu.

Tidak peduli apa yang saya coba, saya tidak dapat menghapus kolom SD.State tanpa menghapus juga kolom sd.g1.institutions. Mereka tampaknya entah bagaimana diikat bersama. Saya pikir ini harus ada hubungannya dengan fungsi agregat sejak saya menemukan masalah ini hanya ketika saya menggunakannya.

Saya mencoba mencari jawaban masa lalu untuk solusi yang mungkin, tetapi saya bahkan tidak tahu apa masalahnya di sini. Jawaban untuk pertanyaan tentang menghapus kolom hanya tidak berfungsi di sini untuk beberapa alasan.

1
1muflon1 3 April 2021, 18:07

1 menjawab

Jawaban Terbaik

Anda menggunakan $ notasi untuk berpikir menambah kolom sebagai variabel tetapi sebaliknya Anda menambahkan seluruh data.FRAME, jika Anda melakukan str (your_dataframe). Anda akan mengamati bahwa kolom SD yang telah Anda tambahkan bukan hanya kolom numerik, itu akan menunjukkan kepada Anda sebagai daftar / data. Bingkai. Itulah sebabnya Anda mengalami kesulitan dalam menghapus / mengubahnya. Cara yang baik untuk memulai adalah tidak melakukan itu. Jadi ini harus bekerja untuk Anda. Catatan, di sini baik rata-rata dan SD dihitung pada langkah yang sama, Anda tidak harus menjalankan beberapa kali deskriptif untuk menghitung SD dan rata-rata. Juga ada panggilan ke do.call end ujung untuk meratakan struktur matriks kolom pada akhirnya. Perhatikan semua kerumitan ini dapat dengan mudah dipecahkan jika Anda memilih untuk menggunakan operasi dplyr atau data.table.

descriptives<-do.call('data.frame', aggregate(G1.Institutions ~ State, df,function(x)c('mean'= mean(x, na.rm=TRUE), 'sd' = sd(x, na.rm=TRUE))))

Di bawah ini adalah tampilan str untuk deskriptif sekarang:

'data.frame':   1 obs. of  3 variables:
 $ State               : chr "Alabama"
 $ G1.Institutions.mean: num 0.193
 $ G1.Institutions.sd  : num 0.264

Di bawah ini adalah apa yang Anda terima pada akhirnya, Anda dapat melihat perbedaan dalam output str

'data.frame':   1 obs. of  3 variables:
 $ State          : chr "Alabama"
 $ G1.Institutions: num 0.193
 $ sd             :'data.frame':    1 obs. of  2 variables: ## this is not right
  ..$ State          : chr "Alabama"
  ..$ G1.Institutions: num 0.264
3
PKumar 3 April 2021, 15:37