我的数据框看起来像这样
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”
任何输入将不胜感激
答案 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];