我想用 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"))
有人可以建议我如何做,或者推荐一个很好的资源来查找吗?
非常感谢。
答案 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))