程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了根据R中的名称值仅减去特定行大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决根据R中的名称值仅减去特定行?

开发过程中遇到根据R中的名称值仅减去特定行的问题如何解决?下面主要结合日常开发的经验,给出你关于根据R中的名称值仅减去特定行的解决方法建议,希望对你解决根据R中的名称值仅减去特定行有所启发或帮助;

我有一个包含两列、区域和用户数的数据框。地区有时是国家和大陆的组合(见下面的虚拟样本)。例如:大洋洲(包括新西兰)和新西兰的用户号。 我正在寻找一种从大陆行中减去国家/地区编号的方法,换句话说,有两行没有重复,大洋洲(没有新西兰)和新西兰。同样适用于欧洲和德国等

这里是示例数据

df = data.frame(
  regions_user = c(2200,1250,900,21200,14200,150000,35000,41900),regions_names = c(
    "Oceania","New Zeland","Africa","north America","Asia","Europe","Germany","Latin America"
  ))

#sample data output

  regions_user regions_names
1         2200       Oceania
2         1250    New Zeland
3          900        Africa
4        21200 north America
5        14200          Asia
6       150000        Europe
7        35000       Germany
8        41900 Latin America

#desired output

regions_user regions_names
1          950       Oceania
2         1250    New Zeland
3          900        Africa
4        21200 north America
5        14200          Asia
6       115000        Europe
7        35000       Germany
8        41900 Latin America

解决方法

在示例数据集中,国家始终位于区域下方的行中,您可以使用 case_when 检查向量 regions 是否在数据框中,然后用 lag 减去下面的行。

library(dplyr)

regions <- c("Oceania","Europe")

df %>% 
  mutate(regions_user = case_when(
    regions_names %in% regions ~ regions_user - lead(regions_user),TRUE ~ regions_user))

# Output
  regions_user regions_names
1          950       Oceania
2         1250    New Zeland
3          900        Africa
4        21200 North America
5        14200          Asia
6       115000        Europe
7        35000       Germany
8        41900 Latin America
,

前提是您拥有或创建了这样的 mapping_list :

library(dplyr)
mapping_list <- data.frame(country = c('New Zeland','Germany'),continent = c('Oceania','Europe'))

mapping_list
#     country continent
#1 New Zeland   Oceania
#2    Germany    Europe

您可以执行连接并减去值:

df %>%
  left_join(mapping_list,by = c('regions_names' = 'country')) %>%
  group_by(continent) %>%
  summarise(subtract = sum(regions_user)) %>%
  right_join(df,by = c('continent' = 'regions_names')) %>%
  transmute(regions_names = continent,regions_user = ifelse(is.na(subtract),regions_user,regions_user - subtract))

#  regions_names regions_user
#  <chr>                <dbl>
#1 Europe              115000
#2 Oceania                950
#3 New Zeland            1250
#4 Africa                 900
#5 North America        21200
#6 Asia                 14200
#7 Germany              35000
#8 Latin America        41900

大佬总结

以上是大佬教程为你收集整理的根据R中的名称值仅减去特定行全部内容,希望文章能够帮你解决根据R中的名称值仅减去特定行所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: