R如何创建动态data.frame?

时间:2017-01-04 10:04:51

标签: r dataframe shiny

我是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个输入框来选择我们想要显示数据的区域:输入$ com,输入$ quar(COUN的2个第一个字符),输入$ dis(最后2个字符为COUN)。

我想创建一个主数据框,包括每个区的数据。所以,我用这个命令创建了一个数据框:

 dfDistrict <- data.frame(
        Districts = c(unique(BI14$COMMUN [BI14$PC == input$com &
                      stri_sub(BI14$COUN,1,2) == input$quar]))

感谢这个命令,我得到一个数据框,每行显示一个区。数据框的第二个变量是每个区的居民数。

但我不知道该怎么做。也许我必须使用&#34;聚合&#34; ?

你能帮我吗?

非常感谢。

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))

我认为&#34;意思是&#34;是错的。

非常感谢。

1 个答案:

答案 0 :(得分:0)

就像迈克在评论中所说,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将按照您在过滤器小部件中设置的方式进行过滤(在此示例中为filter1filter2)。注意:将分配给另一个变量时,需要为创建的数据集添加括号。例如:

df <- filteredData()

数据帧df可以像普通数据一样使用。