[英]R how to create dynamic data.frame?
我是R的新手,我想創建一個動態的data.frame。
請讓我解釋一下。
我有這張桌子:
PC;COUN;COMMUN;BUILD;HOUSING;PERSON;SEX
01;0101;010101; 001; 01; 001; 1
01;0101;010101; 001; 01; 002; 1
01;0101;010101; 001; 02; 001; 2
01;0101;010101; 001; 03; 001; 1
01;0101;010101; 002; 01; 001; 2
01;0101;010101; 002; 01; 002; 1
01;0101;010101; 002; 02; 001; 1
01;0101;010101; 002; 02; 002; 2
01;0101;010101; 002; 02; 003; 2
01;0102;010102; 001; 01; 001; 1
01;0102;010102; 001; 01; 002; 2
01;0102;010102; 001; 01; 003; 1
01;0102;010102; 002; 01; 001; 2
01;0102;010102; 002; 01; 002; 2
01;0102;010102; 002; 01; 003; 1
01;0102;010102; 003; 01; 001; 1
01;0102;010102; 003; 02; 001; 1
01;0102;010102; 003; 02; 002; 2
01;0102;010102; 003; 03; 001; 1
01;0102;010102; 003; 03; 002; 2
PC變量是城市代碼,COUN是縣代碼。 COMMUN是PC與COUN的串聯,是區ID。 BUILD是建築物號,HOUSING表示建築物內的房屋,PERSON:居住在房屋中的人數。 所有變量均為字符格式。
我的桌子上有20萬人和2 000個地區。
在Server.RI中,有3個輸入框來選擇我們要顯示數據的區域:input $ com,input $ quar(COUN的前兩個字符),input $ dis(COUN的后兩個字符)。
我想創建一個包含每個區的數據的主數據框。因此,我使用以下命令創建了一個數據框:
dfDistrict <- data.frame(
Districts = c(unique(BI14$COMMUN [BI14$PC == input$com &
stri_sub(BI14$COUN,1,2) == input$quar]))
借助此命令,我得到了一個數據框,其中每一行都顯示一個區。 數據框的第二個變量是每個區的居民數。
但是我不知道該怎么做。 也許我必須使用“聚合”?
請你幫助我好嗎 ?
非常感謝。
PS:對不起,我的英語不好。
編輯:
這是我想獲取的data.frame(每個區的居民數),它只是每個區的行數:
Districts Residents_Nb
010101 9
010102 11
當然,此后我將添加許多其他變量。
我試過了,但是不起作用:
dfDistrict <- data.frame(
Districts = group_by(COMMUN))
我也嘗試過:
dfDistrict <- data.frame(
Districts = aggregate(myTable, by=list(myTable$COMMUN), FUN=mean,
na.rm=TRUE))
我認為“平均值”是錯誤的。
非常感謝你。
就像Mike在評論中說的那樣, dplyr
是必經之路。
您可以通過以下方式收到所需的數據框:
library(dplyr)
result <- df %>%
group_by(COMMUN) %>%
summarize(total=n())
df
是您的數據框示例。 為了使data.frame與輸入動態相關,您應該繼續閱讀閃亮的反應性元素。 在您的情況下,這可能類似於:
filteredData <- reactive({
data <- filter(
df, df$col1 %in% input$filter1 & df$col2 %in% input$filter2
)
})
返回data
將按照您在過濾器小部件中設置的方式進行過濾(在此示例中是filter1
和filter2
)。 注意:將創建的數據集分配給另一個變量時,需要在其上添加方括號。 例如:
df <- filteredData()
數據幀df
可以像普通幀一樣使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.