gpt4 book ai didi

r - 遍历具有相同前缀的行和变量

转载 作者:行者123 更新时间:2023-12-01 12:06:18 25 4
gpt4 key购买 nike

假设我们有以下数据:

d <- data.frame(
"V" = c("A", "B"),
"X1" = c("A", "A"),
"X2" = c("B","B"),
"X3" = c("C", "C"),
"Y1" = c(1, 4),
"Y2" = c(2, 5),
"Y3" = c(3, 6)
)
d[] <- lapply(d, as.character)

d
V X1 X2 X3 Y1 Y2 Y3
1 A A B C 1 2 3
2 B A B C 4 5 6

我想创建一个变量 VAL,如果 V=X[n],它将采用 Y[n] 的值

我可以用 ifelse 语句来做,但我想避免嵌套的 ifelse,因为 n 是未知的

d$VAL_ifelse = ifelse(d$V == d$X1,d$Y1,
ifelse(d$V == d$X2,d$Y2,
ifelse(d$V == d$X3,d$Y3,NA)))

我试图创建这个循环,但我认为问题出在 j 上?

d_X_var=grep("^X", names(d), value=TRUE)

for(i in 1:nrow(d)){
for(j in 1:length(d_X_var)){
if((d[i,c('V')] == d[i,paste0('X',j)]) == TRUE){
d$VAL_loop[i] <- as.character(d[i,paste0('Y',j)])
} else if((d[i,c('V')] != d[i,paste0('X',j)]) == TRUE){
d$VAL_loop[i] <- NA
}
}
}

d
V X1 X2 X3 Y1 Y2 Y3 VAL_ifelse VAL_loop
1 A A B C 1 2 3 1 <NA>
2 B A B C 4 5 6 5 <NA>

最佳答案

我们可以用向量化的方式得到VAL

d$Val <- d[5:7][which(d[2:4] == d$V, arr.ind = TRUE)]

d
# V X1 X2 X3 Y1 Y2 Y3 Val
#1 A A B C 1 2 3 1
#2 B A B C 4 5 6 5

如果您事先知道 XY 列的列号,则上述情况成立。如果您不知道,我们可以先使用 grep 获取列号,然后再获取子集。

X_cols <- grep("^X", names(d))
Y_cols <- grep("^Y", names(d))
d$Val <- d[Y_cols][which(d[X_cols] == d$V, arr.ind = TRUE)]

关于r - 遍历具有相同前缀的行和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56430151/

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