gpt4 book ai didi

根据列名、ID 号和其他数据框中的键值替换数据框中的值

转载 作者:行者123 更新时间:2023-12-04 10:27:05 24 4
gpt4 key购买 nike

我正在尝试汇总来自多个来源的数据。
在下面的示例中,我想创建一个名为 RESULT 的新数据框。 .我需要替换 dt2 中单元格的值来自 SCORE 的值在 dt1基于 IDTASK变量。

dt1 <- read.table(text = "
ID TASK SCORE
1 task1 0
1 task2 0
2 task1 1
2 task2 0
3 task1 1
3 task2 0
4 task1 0
4 task2 1
5 task1 1
5 task2 0
6 task1 0
6 task2 1
", header = TRUE, stringsAsFactors = FALSE)

dt2 <- read.table(text = "
ID THING1 THING2 THING3 THING4
1 NA task2 NA task1
2 NA NA NA NA
3 task1 NA task2 NA
4 NA task1 NA task2
5 task2 NA task1 NA
6 NA task1 task2 NA
", header = TRUE, stringsAsFactors = FALSE)

RESULT <- read.table(text = "
ID THING1 THING2 THING3 THING4
1 NA 0 NA 0
2 NA NA NA NA
3 1 NA 0 NA
4 NA 0 NA 1
5 0 NA 1 NA
6 NA 0 1 NA
", header = TRUE, stringsAsFactors = FALSE)

例如,在 dt1 ,我们可以看到 ID = 1获得了 0 的分数在 task1 .
来自 dt2 ,我们可以看到 ID = 1做了 THING4为他们的第一个 TASK .
RESULT所示数据框, ID = 1现在的值为 0THING2 .

我不太确定从哪里开始。我已经阅读了几个线程,但没有一个(我能找到)解决这个确切的问题(例如 herehere ),我不太确定如何修改这些示例以获得我需要的结果因为这种编程对我来说很新鲜。
所以我真的很感激任何建议!

最佳答案

我们可以转换为“长”格式,进行连接,然后在替换值后重新整形回“宽”

library(dplyr)
library(tidyr)
dt2 %>%
pivot_longer(cols = -ID, values_to = 'TASK') %>%
left_join(dt1) %>%
mutate(TASK = coalesce(as.character(SCORE), TASK)) %>%
select(-SCORE) %>%
pivot_wider(names_from = name, values_from = TASK)
# A tibble: 6 x 5
# ID THING1 THING2 THING3 THING4
# <int> <chr> <chr> <chr> <chr>
#1 1 <NA> 0 <NA> 0
#2 2 <NA> <NA> <NA> <NA>
#3 3 1 <NA> 0 <NA>
#4 4 <NA> 0 <NA> 1
#5 5 0 <NA> 1 <NA>
#6 6 <NA> 0 1 <NA>

或者另一个选项是 match
library(stringr)
dt2[-1] <- dt1$SCORE[match(str_c(dt2$ID, as.matrix(dt2[-1])),
str_c(dt1$ID, dt1$TASK))]

关于根据列名、ID 号和其他数据框中的键值替换数据框中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60591526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com