首页 > 解决方案 > 如何为数据框的子集重新编码多个变量?

问题描述

我迷路了,所以任何方向都会有所帮助。假设我有一个数据框:

df <- data.frame(
  id = 1:12,
  v1 = rep(c(1:4), 3),
  v2 = rep(c(1:3), 4),
  v3 = rep(c(1:6), 2),
  v4 = rep(c(1:2), 6))

我的目标是为变量 v3 和 v4 重新编码 2=4 和 4=2,但仅针对前 4 种情况(id < 5)。我正在寻找一种适用于多达 20 个变量的解决方案。我知道如何进行基本的重新编码,但我没有看到一种在操作多个变量时实现子集条件的简单方法。

标签: rdataframerecode

解决方案


你可以mutate_at试试case_whendplyr

library(dplyr)

df %>%
  mutate_at(vars(v3:v4), ~case_when(id < 5 & . == 4 ~ 2L, 
                                    id < 5 & . == 2 ~ 4L, 
                                    TRUE ~.))
#   id v1 v2 v3 v4
#1   1  1  1  1  1
#2   2  2  2  4  4
#3   3  3  3  3  1
#4   4  4  1  2  4
#5   5  1  2  5  1
#6   6  2  3  6  2
#7   7  3  1  1  1
#8   8  4  2  2  2
#9   9  1  3  3  1
#10 10  2  1  4  2
#11 11  3  2  5  1
#12 12  4  3  6  2

您可以指定要应用mutate_at该功能的列范围。


推荐阅读