楼主: floraclub
3883 9

[问答] 分组统计计算的问题 [推广有奖]

  • 0关注
  • 0粉丝

准贵宾(月)

大专生

45%

还不是VIP/贵宾

-

威望
0
论坛币
988 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
385 点
帖子
35
精华
0
在线时间
47 小时
注册时间
2016-1-15
最后登录
2017-7-14

楼主
floraclub 发表于 2016-3-16 11:36:36 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
假如我有中国各省外国人人口的数据,数据表是这样:
table1
province     nationality       number
beijing         USA                XXX
beijing         Japan             XXX
beijing         Korea             XXX
......             ......                ......
hebei           ......                ......
......
henan
......
假如我想知道各省日本人所占外国人的比率,得到这样的表:
table2
province     Japanese%      
beijing         XXX

hebei           XXX
henan         XXX
......
请问如何用简单的程序实现呢?


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:统计计算 province National Japanese Beijing 统计

沙发
jiangbeilu 学生认证  发表于 2016-3-16 13:50:03
给你一个例子,作对应的替换,就可以解决你需要的问题了:斜体那边有个美元符号,网页上无法显示
  1. city <- c("A","A","A","B","B","C")

  2. country <- c("a","b","c","a","c","a")
  3. people <- 1:length(city)
  4. df <- data.frame(city,country,people)
  5. df

  6. totalpeople <- tapply(df$people,df$city,sum)
  7. # 求各组a的比例
  8. df[df$country=="a",]$people/totalpeople
复制代码
已有 2 人评分经验 学术水平 热心指数 收起 理由
李会超 + 100 精彩帖子
qoiqpwqr + 1 + 1 精彩帖子

总评分: 经验 + 100  学术水平 + 1  热心指数 + 1   查看全部评分

藤椅
floraclub 发表于 2016-3-18 11:47:24
jiangbeilu 发表于 2016-3-16 13:50
给你一个例子,作对应的替换,就可以解决你需要的问题了:斜体那边有个美元符号,网页上无法显示
谢谢,我试试

板凳
floraclub 发表于 2016-3-18 12:57:00
jiangbeilu 发表于 2016-3-16 13:50
给你一个例子,作对应的替换,就可以解决你需要的问题了:斜体那边有个美元符号,网页上无法显示
如果我只有每个人的记录,并没有各省单个国家的外国人口总数;即无people列。同时我有每个人的年龄的数据,假如我想知道20岁以下日本人在各省外国人口中所占比例,程序又是怎样的呢?

报纸
jiangbeilu 学生认证  发表于 2016-3-18 13:07:05
一步一步计算,先算出各省日本总人数,然后再筛选出小于20岁的样本,再统计这个里面日本人的数目,然后做一个除法就可以了
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
falseform + 1 + 1 + 1 精彩帖子
求证1加1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 2  信用等级 + 1   查看全部评分

地板
floraclub 发表于 2016-3-18 15:40:09
jiangbeilu 发表于 2016-3-18 13:07
一步一步计算,先算出各省日本总人数,然后再筛选出小于20岁的样本,再统计这个里面日本人的数目,然后做一 ...
搞定。非常感谢!

7
floraclub 发表于 2016-3-18 16:30:41
jiangbeilu 发表于 2016-3-18 13:07
一步一步计算,先算出各省日本总人数,然后再筛选出小于20岁的样本,再统计这个里面日本人的数目,然后做一 ...
> PF
          安徽省             澳门           北京市           福建省           甘肃省           广东省   广西壮族自治区           贵州省           海南省
       0.3299364        0.2450216        0.3492863        0.3254712        0.3508339        0.3367874        0.3390300        0.3378311        0.3112192
          河北省           河南省         黑龙江省           湖北省           湖南省           吉林省           江苏省           江西省           辽宁省
       0.3650840        0.3099857        0.3062790        0.3336095        0.3497163        0.3391718        0.3251238        0.3334450        0.3248893
    内蒙古自治区   宁夏回族自治区           青海省           山东省           山西省           陕西省           上海市           四川省           台湾省
       0.3530929        0.3718025        0.3742377        0.3624877        0.3622024        0.3452374        0.3694830        0.3933809        0.3365385
          天津市       西藏自治区             香港 新疆维吾尔自治区           云南省           浙江省           重庆市
       0.3280922        0.4001867        0.3419530        0.3388055        0.3908611        0.3333784        0.3405609

假设我得到这样的结果,除了手动输入,有没有比较简便的办法使其成为比较整齐的数据表?如:
省市     百分比
北京市   XXX%
。。。   。。。
以便于后期将这组数据反映在地图上。

8
sswangjy 发表于 2016-3-19 12:37:10
楼主可以考虑用“dplyr”包,分组统计和变量计算会比较方便。
相关的函数使用可见: http://blog.csdn.net/g090909/article/details/50769701

9
ntsean 发表于 2016-3-21 02:31:41
  1. library(dplyr)
  2. df %>% group_by(city, country) %>% summarise(n = n()) %>% group_by(city) %>% mutate(p = n/sum(n)) %>% filter(country=="Japan")
复制代码
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
falseform + 1 + 1 + 1 精彩帖子
求证1加1 + 1 + 1 精彩帖子

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 1   查看全部评分

10
xue7snow 发表于 2017-11-28 16:27:45
ntsean 发表于 2016-3-21 02:31
最佳答案,最简洁的代码,大写的赞&#128077;

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 06:07