我在数据框中有一列包含主题:
sub <- c("A", "A", "B", "C", "C", "C", "D", "E", "F", "F")
subjects <- data.frame(sub)
我有另一个包含主题列的数据框(其中主题仅在一列中找到):
one <- c("A", "C", "F")
two <- c("B", "D", NA)
three <- c("E", NA, NA)
newsubjects <- data.frame(one, two, three)
我希望将第一个 Dataframe 中的主题重命名为第二个 Dataframe 中与该主题对应的列名。
例如,我想将第一个数据框中的A、C和F主题重命名为“one”。手动执行此操作将花费很长时间,因此我希望有一种方法可以使用第二个数据框中的列来执行此操作。
我尝试了很多forcats::fct_recode和levels的方法,但是没有任何效果,因为我没有正确使用这些函数。例如IIRC我的一个尝试看起来是这样的:
subjects %>%
mutate(new_var = forcats::fct_recode(sub,
!!! setNames(as.character(subjects$sub), newsubjects$one)))
我知道这是完全错误的。问题的一部分是我很难用一种返回相关搜索结果的方式表达我的问题。谢谢你能提供的任何帮助,我很感激。
4条答案
按热度按时间flvlnr441#
使用
purrr::map()
,派生一个将列名与newsubjects
中的值配对的列表。然后在forcats::fct_collapse()
中将其解包,以重新编码subjects
中的值。第一个
kdfy810k2#
如果将
newsubjects
的形状调整为更长,则可以连接两个表:fkaflof63#
在一、二、三等长的基础上还可以创建查找
jv2fixgn4#
以R为底: