【发布时间】:2017-10-02 14:39:10
【问题描述】:
我有一个数据框 df,其中只有一个变量 var 和一些相关值。
df <- data.frame(var = c(rep('AUS',12), rep('NZ',12), rep('ENG',7), rep('SOC',12),
rep('PAK',11), rep('SRI',17), rep('IND',15)))
df %>% count(var)
# # A tibble: 7 x 2
# var n
# <fctr> <int>
# 1 AUS 12
# 2 ENG 7
# 3 IND 15
# 4 NZ 12
# 5 PAK 11
# 6 SOC 12
# 7 SRI 17
基于一些关系,一些值应该用新值重新编码。
df %>% mutate(var = recode(var, 'AUS' = 'A', 'NZ' = 'A', 'ENG' = 'A',
'SOC' = 'A', 'PAK' = 'B', 'SRI' = 'B')) %>% count(var)
# A tibble: 3 x 2
# var n
# <fctr> <int>
# 1 A 43
# 2 IND 15
# 3 B 28
可以看出A和B分别重新编码为4和2的值。我也有这个问题的预期解决方案。但是,有没有其他有效的方法来做到这一点,而不是指定关系相同的次数(4,2)??
【问题讨论】:
-
类似
replace(var, var %in% to_change_A, 'A')和分别用于B? -
看起来您有一个自定义列表要重新编码。试试
case_when,即df %>% mutate(var = as.character(var), var =case_when(var %in% c('AUS', 'NZ', 'ENG', 'SOC') ~ 'A', var %in% c('PAK', 'SRI') ~ 'B', TRUE ~var)) -
或者,将替换列表转换为
data.frame并进行合并/加入。 -
您的意思是保持 IND 不变吗?还是 IND 也应该得到一个代码?
-
@G5W 是的..(至少现在)。