【问题标题】:Renaming levels based on factors of other column R根据其他列 R 的因素重命名级别
【发布时间】:2021-12-24 12:06:46
【问题描述】:

我有一个大型数据框,其中名称 (col1) 应嵌套在位置名称 (col2) 中。在下面的示例中,来自 col1 的“d”应该在 col2 的“z”内,但在第八个元素中列为“y”。我不能只在 col2 中重命名“y”,因为它在大多数地方都是正确的。只有当 col1 == "d" 时,我才需要将 "y" 重命名为 "z"。这是一个包含多个示例的大型数据框,因此也无法仅重命名元素

col1<-c("a","b","c","d","a","b","c","d")
col2<-c("x","y","z","z","x","y","z","y")
df<-data.frame(col1,col2)

【问题讨论】:

  • 您怎么知道正确的映射是 d-&gt;z 而不是 d-&gt;y,因为两者都显示在您的数据中,但您优先考虑第一个
  • 以上只是一个例子。从对数据的了解来看,这是一个明显的错误。就像将德克萨斯州映射到中国而不是美国

标签: r dplyr rename


【解决方案1】:

如果您可以使用col1 和col2 的正确组合创建数据框lookup,这将很容易。然后,您可以使用 lookup left_join 您的原始数据框。

library(dplyr)

# Create a lookup table. In reality you probably need to create this with other methods.
lookup <- df %>%
  distinct() %>%
  filter(!(col1 %in% "d" & col2 %in% "y"))

# join col1 to the lookup
df2 <- df %>%
  select(-col2) %>%
  left_join(lookup, by = "col1")
df2
#   col1 col2
# 1    a    x
# 2    b    y
# 3    c    z
# 4    d    z
# 5    a    x
# 6    b    y
# 7    c    z
# 8    d    z

【讨论】:

  • 非常感谢。我没有提到有多个其他列具有唯一值,因此我必须在 distinct(col1,col2) 中定义列,以防止查找与我的数据集长度相同
猜你喜欢
  • 2015-10-10
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多