【发布时间】:2023-01-27 22:20:01
【问题描述】:
我正在尝试通过将其观察值与列表值进行比较来转换 R 中的 data.frame。这意味着如果列表显示:“'1' 是正确的。”那么所有其他值都应该是错误的或 N.A.
例如,我创建了一个 data.frame,其中包含 3 个不同的变量,用于 3 个观察:
dat <- data.frame("Q" = c("a", "b", "a"),
"P" = c(1, 2, 4),
"R" = c("d", NA, "d"))
对于每个变量,我都定义了一个正确的答案并将它们写在一个列表中:
results <- list("a", 2, "d")
所以对于变量问只要一种是正确的,因为P只要2个因此d是正确答案R.因为我想用虚拟变量创建一个数据集,结果应该是这样的:
[,1] [,2] [,3]
[1,] "Yes" "No" "Yes"
[2,] "No" "Yes" "No"
[3,] "Yes" NA "Yes"
我试图创建一个循环,但结果不如预期:
mylist <- list()
for (j in 1:3) {
vec <- character(3)
for (i in 1:3) {
ifelse(dat[i,j] == results[j], vec[j] <- "Yes",
ifelse((is.na(dat[i,j]) == TRUE), vec[j] <- NA, vec[j] <- "No"))
}
mylist[[j]] <- vec
}
df <- do.call("rbind",mylist)
[,1] [,2] [,3]
[1,] "Yes" "" ""
[2,] "" "No" ""
[3,] "" "" "Yes"
我非常感谢您的所有回答 :)
【问题讨论】:
-
apply(dat,1,FUN = \(x) x==results)为您提供了一个有用的起点。
标签: r dataframe loops if-statement transformation