gpt4 book ai didi

r - 将 bool 值的数据框应用于R中的另一个数据框

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

我有这样一个数据框:

| x | y |
|---|---|
| a | e |
| b | f |
| c | g |
| d | h |

我有一个 bool 值的数据框,例如:
| x     | y     |
|-------|-------|
| FALSE | TRUE |
| FALSE | TRUE |
| TRUE | FALSE |
| TRUE | FALSE |

(实际上,这是 a different post的结果,但这与cos无关,这是一个独立的问题)

我只是在寻找一种将带有bool值的df应用于“常规” df的方法,并获得以下信息:
| x | y |
|---|---|
| | e |
| | f |
| c | |
| d | |

This question提出了一个非常相似的问题,但是解决方案却朝着不同的方向发展。

我尝试了各种不同的索引方案,但是它们都无法保留我想要的输出的矩形结构。
df[mask]太好了,难以置信。

任何建议,不胜感激。

我的资料:
df <- data.frame(
x = c('a', 'b', 'c', 'd'),
y = c('e', 'f', 'g', 'h'), stringsAsFactors = F
)

mask <- structure(list(x = c(FALSE, FALSE, TRUE, TRUE), y = c(TRUE, TRUE,
FALSE, FALSE)), .Names = c("x", "y"), row.names = c(NA, -4L), class = "data.frame")

最佳答案

最简单的方法是(感谢@thelatemail的启发)

df[!mask] <- ""
# x y
# 1 e
# 2 f
# 3 c
# 4 d

之所以有效,是因为 !mask强制转换为逻辑矩阵(因此不需要 as.matrix()调用)
str(mask)
# 'data.frame': 4 obs. of 2 variables:
# $ x: logi FALSE FALSE TRUE TRUE
# $ y: logi TRUE TRUE FALSE FALSE

str(!mask)
# logi [1:4, 1:2] TRUE TRUE FALSE FALSE FALSE FALSE ...
# - attr(*, "dimnames")=List of 2
# ..$ : NULL
# ..$ : chr [1:2] "x" "y"

## and
class(!mask)
# "matrix"

几个 ifelse也可以工作
df$x <- ifelse(mask$x, df$x, "")
df$y <- ifelse(mask$y, df$y, "")

关于r - 将 bool 值的数据框应用于R中的另一个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41731703/

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