如何在R中的数据帧中重新编码一组变量

如何在R中的数据帧中重新编码一组变量,r,reverse,lapply,recode,R,Reverse,Lapply,Recode,我有一个数据框架,其中包含从1到5的不同变量。我想重新编码一些变量,使5变成1,反之亦然,x=6-x。 我想定义一个变量列表,在我的数据帧中像这样重新编码 下面是我使用lappy的方法。我还没有真正理解它 #generate example-dataset var1<-sample(1:5,100,rep=TRUE) var2<-sample(1:5,100,rep=TRUE) var3<-sample(1:5,100,rep=TRUE) d

我有一个数据框架,其中包含从1到5的不同变量。我想重新编码一些变量,使5变成1,反之亦然,x=6-x。 我想定义一个变量列表,在我的数据帧中像这样重新编码

下面是我使用lappy的方法。我还没有真正理解它

  #generate example-dataset
    var1<-sample(1:5,100,rep=TRUE)
    var2<-sample(1:5,100,rep=TRUE)
    var3<-sample(1:5,100,rep=TRUE)
    dat<-as.data.frame(cbind(var1,var2,var3))

    recode.list<-c("var1","var3")  
    recode.function<- function(x){          
    x=6-x
     }
    lapply(recode.list,recode.function,data=dat)

这里有一个使用dplyr执行此操作的选项:


这里有一个使用dplyr执行此操作的选项:


这不需要外部函数或包。只需在Lappy中使用匿名函数,如下所示:

df[recode.list] <- lapply(df[recode.list], function(x) 6-x)

这不需要外部函数或包。只需在Lappy中使用匿名函数,如下所示:

df[recode.list] <- lapply(df[recode.list], function(x) 6-x)
您可以使用plyr中的映射值

您可以使用plyr中的映射值


在这种情况下,计算6-x非常简单,但是如果您有更具体的重新编码模式,您可能需要检查汽车软件包中的自定义重新编码功能。在这种情况下,计算6-x非常简单,但是如果您有更具体的重新编码模式,您可能需要检查汽车软件包中的自定义重新编码功能。谢谢您的帮助你的帮助。不知何故,当我将代码应用于我的数据时,我得到了以下消息:错误[.data.framedf,recode.list:选择了未定义的列。这可能意味着什么?@user2982730,听起来似乎意味着你的recode.list包含了在源data.frame中找不到的列。感谢你的帮助。不知怎的,我在将代码应用到我的数据时收到了以下消息:错误[.data.framedf,recode.list:选择了未定义的列。这可能意味着什么?@user2982730,听起来似乎意味着你的recode.list包含了在源数据中找不到的列。frame.mapvalues对我不起作用。相反,我使用了car包中的recode。也就是说,只有知道有多少不同的列时,recode才有用变量具有的值,并且没有太多的值需要重新编码。mapvalues对我不起作用。相反,我使用了car包中的重新编码。也就是说,只有当知道变量具有多少不同的值并且没有太多的值需要重新编码时,重新编码才有用。
df[recode.list] <- 6 - df[recode.list] 
require(plyr)
# if you just want to replace 5 with 1 and vice versa
df[, recode.list] <- sapply(df[, recode.list], mapvalues, c(1, 5), c(5,1))
# if you want to apply to x=6-x to all values (in this case you don't need mapvalues)
df[, recode.list] <- sapply(df[, recode.list], mapvalues, 1:5, 5:1)