我想创建一个动态数据框。
我有这张桌子:
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万人和2000个地区。
在Server.R中我有3个输入框来选择分区。我们要显示数据:input$com、input$quar(COUN 的前 2 个字符)、input$dis(COUN 的最后 2 个字符)。
我想创建一个包含每个地区数据的主数据框架。我用这个命令创建了一个数据框:
dfDistrict <- data.frame(
Districts = c(unique(BI14$COMMUN [BI14$PC == input$com &
stri_sub(BI14$COUN,1,2) == input$quar]))
我得到一个数据框,其中每行显示一个地区。数据框的第二个变量是每个地区的居民人数。
但是,我不知道该怎么做。也许我必须使用“聚合”?
这是我想获取的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))
我认为“卑鄙”是错误的。
就像迈克在评论中所说,
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
就可以像普通数据框一样使用了。