簡體   English   中英

如何在R中的數據框中重新編碼一組變量

[英]How to recode a set of variables in a dataframe in R

我有一個數據框,其中的變量包含從1到5的值。我想重新編碼一些變量,使5變為1,反之亦然(x = 6-x)。 我想定義一個變量列表,它將在我的數據框中像這樣重新編碼。

這是我使用lapply方法。 我還不太了解。

  #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)

不需要外部函數或軟件包。 只需在lapply使用匿名函數,如下所示:

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

使用[]可讓我們直接替換原始數據集中的那些列。 這是必需的,因為僅使用lapply會導致數據作為命名list


如評論中所述,您實際上甚lapply可以跳過lapply

df[recode.list] <- 6 - df[recode.list] 

這是使用dplyr執行此操作的選項:

recode.function<- function(x){          
  x <- 6-x 
}

recode.list <- c("var1","var3") 

require(dplyr)
df %>% mutate_each_(funs(recode.function), recode.list)

#    var1 var2 var3
#1      2    2    4
#2      3    3    3
#3      3    5    2
#4      3    3    2
#5      4    3    3
#6      5    4    1
#...

您可以使用mapvaluesplyr

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM