gpt4 book ai didi

r - 在 R 中的 For 循环中执行特定于案例的编辑

转载 作者:行者123 更新时间:2023-12-04 14:35:14 25 4
gpt4 key购买 nike

我有调查数据需要执行几个特定于案例的重新编码,但我想避免为每个重新编码创建新的代码行(因为会有几十个)。我希望有一种方法可以使用人行横道重新编码数据,该方法仅根据需要重新编码的 su_id 和 Q# 重新编码所需的值。

su_id <- 100001:100010
Q1 <- c(1, 2, 5, 6, 2, 3, 4, 2, 1, 6)
Q2 <- c(2, 4, 6, 4, 3, 6, 2, 1, 6, 5)

data <- data.frame(su_id, Q1, Q2)

su_id <- c( 100004, 100010, 100003, 100006, 100009)
var <- c("Q1", "Q1", "Q2", "Q2", "Q2")
newVal <- c(4, 4, 5, 5, 5)

cw <- data.frame(su_id, var, newVal)

#data:
su_id Q1 Q2
1 100001 1 2
2 100002 2 4
3 100003 5 6
4 100004 6 4
5 100005 2 3
6 100006 3 6
7 100007 4 2
8 100008 2 1
9 100009 1 6
10 100010 6 5

#Crosswalk:
su_id var newVal
1 100004 Q1 4
2 100010 Q1 4
3 100003 Q2 5
4 100006 Q2 5
5 100009 Q2 5
我开始尝试迭代这样的事情,但显然这不会成功,但希望这能让我了解我想要完成的事情。任何人都可以就如何/是否可能提供建议吗?
su_idToChange <- cw$su_id
varToChange <- cw$var
newValToChange <- cw$newVal

for(i in su_idToChange) {
data_new <- data %>%
mutate(across(all_of(varToChange), case_when(su_id %in% su_idToChange
~ coalesce(deframe(cw[cw$var == "Q1" | cw$var == "Q2", ][-1])[.], .))))
}
谢谢!

最佳答案

如果我理解您的问题是正确的,那么您正在尝试执行以下操作:

my_change_fun <- function(data, cw) {
for (i in seq_len(nrow(cw))) {

data[data$su_id == cw[i, 1], cw[i, 2]] <- cw[i, 3]
}
data
}

my_change_fun(data, cw)
#> su_id Q1 Q2
#> 1 100001 1 2
#> 2 100002 2 4
#> 3 100003 5 5
#> 4 100004 4 4
#> 5 100005 2 3
#> 6 100006 3 5
#> 7 100007 4 2
#> 8 100008 2 1
#> 9 100009 1 5
#> 10 100010 4 5
创建于 2021-08-30 由 reprex package (v2.0.1)

关于r - 在 R 中的 For 循环中执行特定于案例的编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68989694/

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