首页 > 解决方案 > 如何在数据框中按列名重命名观察结果?

问题描述

我有一个类似于以下内容的数据框:

Name             L06          R12       L02
Joe Smith         1            0         0
Dave Thomas       0            1         1
Alex Smith        0            0         1
Eric Jones        1            0         0

我希望将值为 1 的观察值重命名为其列的名称。请注意,我只会重命名某些列(此处为第 2-4 列)。

Name             L06          R12       L02
Joe Smith         L06          0         0
Dave Thomas       0            R12       L02
Alex Smith        0            0         L02
Eric Jones        L06          0         0

这可能吗?

标签: rdataframe

解决方案


您可以尝试使用imapfrom purrr

cols <- 2:4
df[cols] <- purrr::imap(df[cols], ~replace(.x, .x == 1, .y))
df

#        Name L06 R12 L02
#1   JoeSmith L06   0   0
#2 DaveThomas   0 R12 L02
#3  AlexSmith   0   0 L02
#4  EricJones L06   0   0

在基础 R 中,您可以使用Map

df[cols] <- Map(function(x, y) replace(x, x == 1, y), df[cols], names(df[cols]))

推荐阅读