Я надеюсь, что не пропустил это, но я не смог найти работающего решения этой проблемы.
У меня есть набор фреймов данных с общим столбцом. Эти столбцы содержат несколько и разные ошибки транскрипции, некоторые из которых являются общими, а другие нет, для нескольких значений.
Я хотел бы заменить / перекодировать ошибки транскрипции (bad_values) с правильными значениями (good_values) во всех фреймах данных.
Я попытался вложить семейство функций map*()
в списки фреймов данных, bad_values и good_values, чтобы сделать это, среди прочего. Вот пример:
df1 = data.frame(grp = c("a1","a.","a.",rep("b",7)), measure = rnorm(10))
df2 = data.frame(grp = c(rep("as", 3), "b2",rep("a",22)), measure = rnorm(26))
df3 = data.frame(grp = c(rep("b-",3),rep("bq",2),"a", rep("a.", 3)), measure = 1:9)
df_list = list(df1, df2, df3)
bad_values = list(c("a1","a.","as"), c("b2","b-","bq"))
good_values = list("a", "b")
dfs = map(df_list, function(x) {
x %>% mutate(grp = plyr::mapvalues(grp, bad_values, rep(good_values,length(bad_values))))
})
То, что я не обязательно ожидал, будет работать за пределами одной пары хорошее-плохое значение. Тем не менее, я подумал, что в этом случае может сработать еще один вызов map*()
:
dfs = map(df_list, function(x) {
x %>% mutate(grp = map2(bad_values, good_values, function(x,y) {
recode(grp, bad_values = good_values)})
})
Я пробовал ряд других подходов, ни один из которых не сработал.
В конечном счете, я хотел бы перейти от набора фреймов данных с ошибками, как здесь:
[[1]]
grp measure
1 a1 0.5582253
2 a. 0.3400904
3 a. -0.2200824
4 b -0.7287385
5 b -0.2128275
6 b 1.9030766
[[2]]
grp measure
1 as 1.6148772
2 as 0.1090853
3 as -1.3714180
4 b2 -0.1606979
5 a 1.1726395
6 a -0.3201150
[[3]]
grp measure
1 b- 1
2 b- 2
3 b- 3
4 bq 4
5 bq 5
6 a 6
К списку «фиксированных» фреймов данных, например:
[[1]]
grp measure
1 a -0.7671052
2 a 0.1781247
3 a -0.7565773
4 b -0.3606900
5 b 1.9264804
6 b 0.9506608
[[2]]
grp measure
1 a 1.45036125
2 a -2.16715639
3 a 0.80105611
4 b 0.24216723
5 a 1.33089426
6 a -0.08388404
[[3]]
grp measure
1 b 1
2 b 2
3 b 3
4 b 4
5 b 5
6 a 6
Любая помощь будет очень ценится