r - 从 Excel 迁移到 R:如何根据特定的单元格值操作数据?
问题描述
我正在慢慢地从 Excel 迁移到 R,但在 Excel 中需要花费我两秒钟才能完成的任务时遇到问题……例如,请参阅以下数据示例,即法国和英国的 GDP:
假设我想计算 1929 年的百分比变化,也就是大萧条。在 Excel 中,我会在法国的新列中执行类似的操作:=(B2/$B$11)*100
然后将公式向下填充到相邻的单元格。然后,重复英国。
你将如何在 R 中做到这一点(注意,这只是一个例子。我对背后的思考过程很感兴趣)?显然,数据的结构会因三个变量而不同:年份、国家、gdp。
我正在考虑使用mutate()
然后case_when()
确定正确的国家。但这就是我卡住的地方。看看我的代码。数据是麦迪逊:
library(tidyverse)
library(ggplot2)
library(haven)
library(readxl)
# Loading df
df <- read_excel("/PATH TO DATA/mpd2018.xlsx", sheet = 2)
# Tidy dataset
df <- df %>%
transmute(
cntry = as_factor(countrycode), # Rename and define as factor
year = zap_labels(year), # Zap labels
gdp = zap_labels(rgdpnapc) # Rename and zap labels
) %>%
dplyr::filter(
cntry %in% c("FRA","GBR"), # Keep only FRA and GRB
year >= 1920 & year <= 1950 # Only the interval between 1920 and 1950
)
# Calculations
df <- df %>% mutate(
gdp_rel = case_when(
cntry == "FRA" ~ (df$gdp/df[10,3])*100,
cntry == "GBR" ~ (df$gdp/df[41,3])*100
))
首先,代码会产生错误。但更重要的是,我相信它可以比精确定位更智能df[x, y]
。什么是数据框要大得多?
解决方案
一旦你放弃了语法,R 通常更具可扩展性并且更容易执行此类任务。
您可以使用across
将函数应用于多个列。在这里,across
我们提到了我们想要应用函数的列 ( France
, UK
),然后提到我们想要应用的函数。
library(dplyr)
df %>% mutate(across(c(France, UK), ~./.[Year == 1929] * 100))
推荐阅读
- javascript - 自定义 HTML src 属性中的 GTM 变量
- swift - 如何将 Swift 中的数据从 NSArray 转换为 Dictionary?
- database - 如何在 Oracle 数据库中添加默认空值
- qt - 如何更新 Qt 维护工具
- php - 排除同名项目
- php - 在 Laravel 中根据表单值搜索数据
- java - NoClassDefFoundError 总是由 ClassNotFoundException 引起的吗?
- python - 识别矩阵中相邻元素的属性
- javascript - 刀片分页开始数据页0标签1使用jquery
- java - 获取 PKIX 路径构建失败