更有效的方法是在data.frame中重新编码一列,以其他列条目为条件

时间:2016-02-24 10:06:58

标签: r recode

我正在寻找一种更有效的方法来重新编码数据帧中的列条目,其中重新编码取决于其他列中的条目。

举一个这个简单的例子,它演示了我为重新编码数据创建新列的当前过程,将其转换为字符,然后使用子集方括号来重新编码数据(此过程是否有正式名称?) 。

## example data frame
df = data.frame( id = seq( 1 , 100 , by=1 ) ,
                 x = rep( c("W", "Z") , each=50),
                 y = c( rep( c("A","B","C","D") , 25 ) ) )

# add a new column based on column y; convert to character 
df$newY = as.character( df$y ) 

# change newY entries to numbers based on conditions in other columns
df$newY[ df$x == "W" & df$newY == "B" ] <- 1
df$newY[ df$x == "Z" & df$newY == "D" ] <- 3

此过程适用于使用少量条件重新编码变量,但对于大量条件参数或者有许多不同的变量要重新编码时会变得很麻烦。

有没有人帮我找到更有效的方法呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

一些方法:

df <- data.frame(id = seq( 1 , 100 , by=1 ) ,
                 x = rep( c("W", "Z") , each=50),
                 y = c( rep( c("A","B","C","D") , 25)))

# Take the product (my preference)
as.numeric(df$x) * as.numeric(df$y)

# Create new factor based on x and y and convert to numeric
as.numeric(as.factor(paste0(df$x, df$y)))