使用参考列表重新编码特定的列值

时间:2019-05-28 14:50:27

标签: r

我的数据框看起来像这样

data = data.frame(ID=c(1,2,3,4,5,6,7,8,9,10),
              Gender=c('Male','Female','Female','Female','Male','Female','Male','Male','Female','Female'))

我有一个参考列表,看起来像这样-

ref=list(Male=1,Female=2)

我想使用此引用列表替换Gender列中的值,而无需在数据框中添加新列。

这是我的尝试

do.call(dplyr::recode, c(list(data), ref))

哪个给我以下错误-

  

没有适用于“重新编码”的方法应用于类的对象   “ data.frame”

任何输入将不胜感激

5 个答案:

答案 0 :(得分:2)

left_join将'ref'stack转换为两列数据后,可以执行list

library(dplyr)
left_join(data, stack(ref), by = c('Gender' = 'ind')) %>%
    select(ID, Gender = values)

一种base R方法是

unname(unlist(ref)[as.character(data$Gender)])
#[1] 1 2 2 2 1 2 1 1 2 2

答案 1 :(得分:2)

在基数R中:

data$Gender = sapply(data$Gender, function(x) ref[[x]])

答案 2 :(得分:2)

您可以使用factor,即

factor(data$Gender, levels = names(ref), labels = ref)
#[1] 1 2 2 2 1 2 1 1 2 2

答案 3 :(得分:2)

您可以unlist ref为您提供一个命名的代码矢量,然后使用您的数据对其进行索引:

transform(data,Gender=unlist(ref)[as.character(Gender)])
   ID Gender
1   1      1
2   2      2
3   3      2
4   4      2
5   5      1
6   6      2
7   7      1
8   8      1
9   9      2
10 10      2

答案 4 :(得分:1)

令人惊讶的是,这一功能同样有效:

[NSApp activateIgnoringOtherApps:YES];