Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dplyr:group_by,并在创建新变量时在汇总时使用组值_R_Dplyr - Fatal编程技术网

dplyr:group_by,并在创建新变量时在汇总时使用组值

dplyr:group_by,并在创建新变量时在汇总时使用组值,r,dplyr,R,Dplyr,我正在开发一个数据框架,在这个数据框架中,我使用group_by和Summary来获得一些使用dplyr的结果。然而,我打算在摘要中生成的一个变量需要根据分组变量的值访问第二个数据帧值,我猜不出该怎么做。 这里有一个例子 这是我的2个df: ExampleData <- structure(list(country = structure(c(5L, 5L, 5L, 1L, 1L, 1L,

我正在开发一个数据框架,在这个数据框架中,我使用group_by和Summary来获得一些使用dplyr的结果。然而,我打算在摘要中生成的一个变量需要根据分组变量的值访问第二个数据帧值,我猜不出该怎么做。 这里有一个例子

这是我的2个df:

ExampleData <- structure(list(country = structure(c(5L, 5L, 5L, 1L, 1L, 1L, 
                                                    4L, 4L, 4L, 2L, 2L, 2L), .Label = c("Bolivia", "Colombia", "Ecuador", 
                                                                                        "Peru", "Venezuela"), class = "factor"), area = c(21962759.1957539, 
                                                                                                                                          6116515271.82745, 4420526.44962988, 950155731.837125, 3284949253.71748, 
                                                                                                                                          13008533744.7177, 181171.153229255, 724458.059924146, 545485754.118267, 
                                                                                                                                          646585511.365563, 5586512056.6131, 4025165194.1968)), .Names = c("country", 
                                                                                                                                                                                                           "area"), row.names = c(0L, 1L, 2L, 87L, 88L, 89L, 117L, 118L, 
country.areas <- structure(list(country = c("Bolivia", "Colombia", "Ecuador", 
                                            "Peru", "Venezuela"), area = c(1090353, 1141962, 256932, 1296912, 
                                                                           916560.5)), .Names = c("country", "area"), row.names = c(NA, 
                                                                                                                                    5L), class = "data.frame")
> head(ExampleData)
     country        area
0  Venezuela    21962759
1  Venezuela  6116515272
2  Venezuela     4420526
87   Bolivia   950155732
88   Bolivia  3284949254
89   Bolivia 13008533745
> head(country.areas)
    country      area
1   Bolivia 1090353.0
2  Colombia 1141962.0
3   Ecuador  256932.0
4      Peru 1296912.0
5 Venezuela  916560.5
最后一个
国家
(最后一个词)想要指的是从df country.areas(例如:玻利维亚为1090353.0)中选取的在集团_中被考虑的国家的地区。
km2.country
部件按预期工作。。。我只想把这个值除以这个国家的面积,得到一个百分比。 当然,下一步我可以很容易地做到。。。但是我正在尝试学习dplyr,我仍然很难理解
groupby
函数的哪些功能,它似乎很强大

谢谢

这应该可以

by.country <- ExampleData %>% group_by(country) %>% 
                      summarise(km2.country=sum(area)/1000000) %>% 
                      left_join(country.areas) %>% #note this brings in a new variable also called area
                      mutate(PercOfCountry=km2.country/area)

by.country
# A tibble: 2 × 4
    country km2.country      area PercOfCountry
      <chr>       <dbl>     <dbl>         <dbl>
1   Bolivia   17243.639 1090353.0    0.01581473
2 Venezuela    6142.899  916560.5    0.00670212
by.country%集团\ u by(country)%>%
汇总(平方公里。国家=总和(面积)/1000000)%>%
left_join(country.area)%>%#注意,这引入了一个新变量,也称为area
变异(PercOfCountry=km2.国家/地区)
按国家
#一个tibble:2×4
国家平方公里。国家面积PercOfCountry
1玻利维亚17243.639 1090353.0 0.01581473
2委内瑞拉6142.899 916560.5 0.00670212
这应该可以

by.country <- ExampleData %>% group_by(country) %>% 
                      summarise(km2.country=sum(area)/1000000) %>% 
                      left_join(country.areas) %>% #note this brings in a new variable also called area
                      mutate(PercOfCountry=km2.country/area)

by.country
# A tibble: 2 × 4
    country km2.country      area PercOfCountry
      <chr>       <dbl>     <dbl>         <dbl>
1   Bolivia   17243.639 1090353.0    0.01581473
2 Venezuela    6142.899  916560.5    0.00670212
by.country%集团\ u by(country)%>%
汇总(平方公里。国家=总和(面积)/1000000)%>%
left_join(country.area)%>%#注意,这引入了一个新变量,也称为area
变异(PercOfCountry=km2.国家/地区)
按国家
#一个tibble:2×4
国家平方公里。国家面积PercOfCountry
1玻利维亚17243.639 1090353.0 0.01581473
2委内瑞拉6142.899 916560.5 0.00670212

使用
internal\u join
命令合并您的数据帧。@MrFlick,是的,谢谢,那肯定可以。当我计算完表格后,这是我想我可以做的事情之一。然而,我正在努力学习如何从一个局外人那里获取数据,并在总结中使用它,特别是当我需要使用团队的价值时。。。也许这是不可能的?用
internal\u join
命令合并您的数据帧。@MrFlick,是的,谢谢,那肯定可以。当我计算完表格后,这是我想我可以做的事情之一。然而,我正在努力学习如何从一个局外人那里获取数据,并在总结中使用它,特别是当我需要使用团队的价值时。。。也许这是不可能的?啊!可能就是这样!所以,要完全理解它:left_join将使join始终通过变量在
group_中搜索匹配项?不,这与分组无关
left_join(a,b)
将在
a
b
中查找公共变量名称,并且对于
a
中的每一行,将在
b
中添加公共变量匹配的任何其他列。在这种情况下,
a
group_by
summary
操作的结果,是一个数据框,其中列为
country
km2.country
(委内瑞拉和玻利维亚各一行)
b
country.area
,因此公共变量是
country
,联接为找到的每个匹配行添加相应的
area
。谢谢,这是一个很好的方法。然而,我仍然很好奇是否有可能调用第二个数据帧,并根据group_by value挖掘它的值。也许我错了。。。但是我觉得有一段时间我会想要这个(我可能不会有任何匹配的变量名)…你可以在你的
摘要
声明中做一些类似
PercOfCountry=km2.country/country.arease$area[匹配(country,country.arease$country)]
!可能就是这样!所以,要完全理解它:left_join将使join始终通过
变量在
group_中搜索匹配项?不,这与分组无关
left_join(a,b)
将在
a
b
中查找公共变量名称,并且对于
a
中的每一行,将在
b
中添加公共变量匹配的任何其他列。在这种情况下,
a
group_by
summary
操作的结果,是一个数据框,其中列为
country
km2.country
(委内瑞拉和玻利维亚各一行)
b
country.area
,因此公共变量是
country
,联接为找到的每个匹配行添加相应的
area
。谢谢,这是一个很好的方法。然而,我仍然很好奇是否有可能调用第二个数据帧,并根据group_by value挖掘它的值。也许我错了。。。但是我觉得有一段时间我会想要这个(我可能不会有任何匹配的变量名)…你可以在你的
摘要
语句中做一些类似
PercOfCountry=km2.country/country.areas$area[匹配(country,country.areas$country)]