【发布时间】:2021-04-13 08:38:26
【问题描述】:
我想做一些应该相对容易的事情,但我发现这是不可能的。 (在 R 中相对较新)。
我有这两个数据集:
df1 <- data.frame("Basket" = c("W1", "W1"),
"Fruits" = c("apple", "banana"),
"Color" = c("green", "yellow"),
"Spanishfruit" = c("manzana", "platano"),
"Spanishcolor" = c("verde", "amarillo"))
df <- data.frame("Basket" = c("W2", "W2", "W2"),
"Fruits" = c("apple", "banana", "grape"),
"Color" = c("green", "yellow", "purple"),
"Spanishfruit" = c(NA, NA, NA),
"Spanishcolor" = c(NA, NA, NA))
首先,我想合并它们(我为此使用了 bind_rows),这是可行的。但是,我还想在第二个数据框中重新编码 NA,以便如果数据集之间的变量 fruit 和 color 相等(而变量篮子不相等),变量“Spanishfruit”和“Spanishcolour”(简单地翻译成西班牙语)是平等的。即,我只设法做到了这一点:
df3 <- data.frame("Round" = c("W1", "W1","W2", "W2", "W2" ),
"Fruits" = c("apple", "banana", "apple", "banana", "grape"),
"Color" = c("green", "yellow", "green", "yellow", "purple"),
"Spanishfruit" = c("manzana", "platano", NA, NA, NA),
"Spanishcolor" = c("verde", "amarillo", NA, NA, NA))
但我想要的是这个。
df4 <- data.frame("Round" = c("W1", "W1","W2", "W2", "W2" ),
"Fruits" = c("apple", "banana", "apple", "banana", "grape"),
"Color" = c("green", "yellow", "green", "yellow", "purple"),
"Spanishfruit" = c("manzana", "platano", "manzana", "platano", NA),
"Spanishcolor" = c("verde", "amarillo", "verde", "amarillo", NA))
到目前为止,我尝试了几件事,主要是结合了 mutate 和 case_when。我认为解决方案可能是在合并它们时合并和建立正确的键?我真的迷路了,无法在任何地方找到解决这个问题的方法。我想要的是,如果“水果”和“颜色”列中的值在 df1 的一行和 df2 的另一行中相等,当我合并它们时,来自 df2 的 rwo 中的“Spanishfruit”和“Spanishcolor”中的值等于 df1 中的行中的值,而变量篮子仍然不同。或者,换一种说法:如果跨行的两个变量的值相等,我希望两个变量的值也相等,同时保持另一个变量不同。
如果有人知道如何解决这个问题,我将非常感激。找到一个基于 tidyverse 的解决方案会更有帮助,但一切都会有所帮助。
谢谢!
【问题讨论】:
标签: r