重新编码数据并交换R中的整数级别

时间:2017-10-08 21:19:56

标签: r dataframe

我正在清理数据框,其中数据已被错误编码。我需要重新编码给定变量中的一些数据,以便交换用于表示整数级别的数字,例如,对于var1:2s应为3s,3s应为2s。

对于比下面的代码稍微大一些的变量(~20),有更简洁的方法吗?

起点(df):

df1 <- data.frame(var1=c(1,1,2,2,2,2,3,3,3,4),var2=c(1,1,2,2,3,3,4,4,5,5),var3=c(5,5,6,6,7,7,7,8,8,8),var4=c(4,4,5,5,6,6,7,7,1,1))

期望结果(df):

df2 <- data.frame(var1=c(1,1,3,3,3,3,2,2,2,4),var2=c(1,1,2,2,3,3,5,5,4,4),var3=c(8,8,6,6,7,7,7,5,5,5),var4=c(7,7,8,8,9,9,5,5,1,1))

当前代码:

df1$var3[df1$var3==5] <- 55
df1$var3[df1$var3==8] <- 88

df1$var3[df1$var3==55] <- 8
df1$var3[df1$var3==88] <- 5

3 个答案:

答案 0 :(得分:2)

您可以使用uint32_t size; int result = read(fd, &size, sizeof(uint32_t)); 中的mapvalues,如下所示:

plyr

答案 1 :(得分:1)

您可以使用dplyr中的函数recode()

> library(dplyr)
> df1$var1
 [1] 1 1 2 2 2 2 3 3 3 4
> recode(df1$var1, `2` = 3, `3` = 2)
 [1] 1 1 3 3 3 3 2 2 2 4

Herehere是包含有关该功能的更多信息和文档的链接。

答案 2 :(得分:1)

为了获得可读性并假设无法使用模式重新分配值,我建议使用deck = [x +" " + y for x in RANKS for y in SUITE] 中的case_when

dplyr