如何用R中另一个数据集的值替换一个数据集中的值

时间:2021-02-12 11:58:32

标签: r data-manipulation

我想用 R 中另一个数据帧的值替换我的数据帧中的行。我将两者合并在一起并创建了一个列,该列指定数据来自哪个数据帧(data_set)。如果两个数据集中出现相同的“project_element”,我想将其替换为其他数据集中的相应值。例如。下面是我拥有的数据框的摘录。我想用来自动物数据集的值替换数据集宠物中的“任务 1”值。

df1<-data.frame(value = c(1,2,3,4,5),
                project_element = c("Task 1", "Task 1", "Task 2", "Task 3", "Task 4"), 
                data_set = c("pets", "animals", "pets", "pets", "pets"))

有人可以建议我如何做,或者推荐一个很好的资源来查找吗?

非常感谢。

3 个答案:

答案 0 :(得分:1)

对于每个项目,您可以反转值,以便数据集“pets”的值转到“animals”,反之亦然。

library(dplyr)
df1 %>% group_by(project_element) %>% mutate(new_value = rev(value))

#  value project_element data_set new_value
#  <dbl> <chr>           <chr>        <dbl>
#1     1 Task 1          pets             2
#2     2 Task 1          animals          1
#3     3 Task 2          pets             3
#4     4 Task 3          pets             4
#5     5 Task 4          pets             5

答案 1 :(得分:1)

不是最优雅的解决方案,但它有效:

setDT(df)
df[, index := 1:.N, by = "project_element"]
df <- data.frame(df) %>%
  group_by(project_element) %>%
  mutate(
    value = ifelse(value != df[df$data_set == "animals",]$value & sum(index) > 2, df[df$data_set == "animals",]$value, value)
  ) 

它创建一个索引来计算相同 project_element 的出现次数,并使用索引列的总和来决定哪些行必须被替换。

答案 2 :(得分:1)

我们可以使用

df1$new_value <- with(df1, ave(value, project_element, FUN = rev))
相关问题