r - R dplyr 相对于其他列改变列
问题描述
我有一个数据框:
df <- data.frame(x = 1:5, y = rep(1,5), z = 0:4,
fx = NA_real_, fy = NA_real_, fz = NA_real_)
my_count_columns <- c("x", "y", "z")
我想通过在适当的列fx
,中进行变异来填充信息fy
,fz
这表示每个计数变量的频率。
假设我不提前知道列名,在 dplyr/tidyverse 中执行此操作的最干净的方法是什么?
预期输出:
x y z fx fy fz
1 1 1 0 0.06666667 0.2 0.0
2 2 1 1 0.13333333 0.2 0.1
3 3 1 2 0.20000000 0.2 0.2
4 4 1 3 0.26666667 0.2 0.3
5 5 1 4 0.33333333 0.2 0.4
解决方案
中base R
,这可能是
df[paste0('f', my_count_columns)] <- lapply(my_count_columns,
function(x) sapply(df[[x]], function(y)
mean(y == df[setdiff(my_count_columns, x)])))
或在tidyverse
library(dplyr)
library(purrr)
df %>%
select(all_of(my_count_columns)) %>%
mutate(across(everything(), ~ map_dbl(., function(x)
mean(x == df[setdiff(my_count_columns, cur_column())])),
.names = 'f{.col}'))
推荐阅读
- mysql - SQL查询更新具有相同文件名的记录
- javascript - 如何在不重新加载页面的情况下重新加载 Thymeleaf 表?
- android - Android自定义视图添加到窗口消费和按条件分派触摸事件
- koin - 覆盖 Activity.oncreate 中使用的测试依赖项
- python - 使用 Pandas 时出现错误:“ValueError: 2 is not in range”
- python - 通过 sqlalchemy 查询数据后获取类提示?
- kubernetes - 如何为 kubernetes api 显示 swagger ui?
- ansible - Ansible:如果在剧本中多次播放时一次播放中的任务失败,则不会执行进一步的播放
- javascript - mapStateToProps 返回空状态
- java - Teradata 数据库和 Eclipse/Java 错误:为非 CHAR 数据指定了大写或 CASESPECIFIC