r - 如何从R中的另一行中减去一行?
问题描述
我是 R 的新手,多年来一直在尝试subtract
使用最新的(即从另一行减去一行)。country value
from another country
gapminder dataset
数据集
gapminder_new %>%
filter(country == c("India","Bangladesh"))
########## output ############
country 1960 1961 1962 1963 1964 1965 1966 1967
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
Bangladesh 372 384 394 381 411 405 402 382
India 330 336 339 352 370 353 345 365
我已经尝试了许多不同的组合,包括底座和管道,但都没有成功。
最初的失败尝试
gapminder_new %>%
filter(country == c("India","Bangladesh")) %>%
.[country == "India",] - .[country == "Bangladesh",]
###################
gapminder_new %>%
filter(country == c("India","Bangladesh")) %>%
mutate(Diff_result = (. %>% filter(country == "India") ) - (. %>% filter(country == "Bangladesh")) )
###################
gapminder_new[country == "India",] - gapminder_new[country == "Bangladesh",]
在此之后,我意识到这可能是一个问题,因为国家名称不能被减去,因为它们是 chars,所以我应该从减法中消除它们并将它们用作行索引,就像在 python 中一样。
所以我尝试了下面的代码,但即使这样也不起作用:
按行索引减去
# setting a row index
rownames(gapminder_new) <- gapminder_new$country
# subtracting only numerical col using row index
gapminder_new["India", 2: ncol(gapminder_new)] - gapminder_new["Bangladesh", 2: ncol(gapminder_new)]
如何在基础 R 和使用管道中解决这个问题???
每天我都会在 R 中遇到 10 种不同的数据操作任务。在某个地方我们需要 pull(),在某个地方只能选择 .[[]] 而不是在其他地方。所有这些规则在哪里定义?
我不知道为什么 R 在从基础 R 到管道、从单个 ML 包到插入符号到 tidymodel 再到许多其他东西的选择上如此复杂。现在我真的觉得 Python 比 R 更简单,更容易学习,而且学习时间也很短。
(更新:这是我最终使用的,并在答案中发布了详细信息)
#convert to data frame
gapminder_new <- as.data.frame(gapminder_new)
# set country row index
rownames(gapminder_new) <- gapminder_new$country
# subtracting only numerical col using row index
gapminder_new["India", 2: ncol(gapminder_new)] - gapminder_new["Bangladesh", 2: ncol(gapminder_new)]
解决方案
这是你想要的:
> gapminder_new %>% select(-1) %>% mutate(across(everything(), ~lead(.x) - (.x))) %>% na.omit()
# A tibble: 1 x 8
`1960` `1961` `1962` `1963` `1964` `1965` `1966` `1967`
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 -42 -48 -55 -29 -41 -52 -57 -17
>
使用的数据:
> gapminder_new
# A tibble: 2 x 9
country `1960` `1961` `1962` `1963` `1964` `1965` `1966` `1967`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Bangladesh 372 384 394 381 411 405 402 382
2 India 330 336 339 352 370 353 345 365
>
推荐阅读
- python - 对元组中不同大小的列表进行分组
- c++ - 将 C++ 类型信息保存到文件以供跨程序调用使用
- javascript - 如何在格式化的货币输入上使用 JavaScript 'Max' 验证规则
- capistrano - Capistrano 的 /current 文件夹总是指向同一个(不存在的)版本
- node.js - 如何在连接表中使用 Feathers 和 Sequelize 定义多对多?
- javascript - 在 JavaScript 中释放内存的正确方法
- jenkins - 使用已经具有“选择参数”的参数安排脚本化管道作业
- vba - 使用 VBA 将数据分成列时如何自动接受弹出消息?
- java - AWS Amazon S3 Java SDK - 在上传大文件时刷新凭证/令牌
- javascript - Vue.js 转换从列表中更改选定元素