【发布时间】:2021-11-18 08:15:41
【问题描述】:
我有一个带有字符值的非常大的数据框。我想将行相互比较并根据比较创建 ID。问题是df中有NA,我希望将它们评估为匹配任何值。 另一个问题是 ID 也需要在同一步骤中创建(或者我正在以一种过于复杂的方式考虑这个问题)。
这是我创建的玩具 df:
library(tidyverse)
library(purrr)
# make toy df
Set1 <- c("A", "B", "C","A")
Set2 <- c("A", "D", "B", "A")
Set3 <- c(NA, "B", "C", "A")
Set4 <- c("A", "G", "B", "A")
Set5 <- c("F", "G", NA, "F")
Set6 <- c("A", "B", "C", "C")
sets <- rbind(Set1, Set2, Set3, Set4, Set5, Set6)
colnames(sets) <- c("Var1", "Var2", "Var3", "Var4")
sets
Var1 Var2 Var3 Var4
Set1 "A" "B" "C" "A"
Set2 "A" "D" "B" "A"
Set3 NA "B" "C" "A"
Set4 "A" "D" "B" "A"
Set5 "F" "G" NA "F"
Set6 "A" "B" "C" "C"
这是所需的输出,作为单独的 df 或作为新列,任何一个都一样好:
# as new column
Var1 Var2 Var3 Var4 COMP
Set1 "A" "B" "C" "A" "Group1"
Set2 "A" "D" "B" "A" "Group2
Set3 NA "B" "C" "A" "Group1"
Set4 "A" "D" "B" "A" "Group3"
Set5 "F" "G" NA "F" "Group4"
Set6 "A" "B" "C" "C" "Group5"
# as new df
COMP
Set1 "Group1"
Set2 "Group2
Set3 "Group1"
Set4 "Group3"
Set5 "Group4"
Set6 "Group5"
我认为这可以通过rowwise() 和map 实现,但即使在阅读了类似的questions 之后,我也无法确切地知道如何实现这一点,尤其是如何连续且一致地命名新组。任何想法将不胜感激。
【问题讨论】:
-
哦,是的,我设法在我的玩具套装中犯了一个错误......我纠正了它,感谢您发现@RonakShah
标签: r dataframe tidyverse purrr rowwise