我有一个数据框:
| x | y |
|---|---|
| a | e |
| b | f |
| c | g |
| d | h |
我有一个bool值的数据框:
| x | y |
|-------|-------|
| FALSE | TRUE |
| FALSE | TRUE |
| TRUE | FALSE |
| TRUE | FALSE |
(实际上这些内容来自a different post,但这并不是真正相关的因为这是一个独立的问题)
我正在寻找一种方法,将具有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")
答案 0 :(得分:7)
最简单的方法是(感谢@thelatemail的灵感)
init
哪个有效,因为select UPPER(TO_CHAR(Hire_date,'MONTH'))
from employees
returns a list of months(containing "2" entries for 'MARCH')
SELECT COUNT(EMPLOYEEID) "March Joinees"
FROM Employees
WHERE UPPER(TO_CHAR(Hire_date,'MONTH')) = 'MARCH';
returns 0 as count
强制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"
答案 1 :(得分:6)
您可以使用mapply
遍历列,检查mask
中的值:
as.data.frame( mapply(function(x,y) ifelse(y, x, ''), df, mask))
## x y
## 1 e
## 2 f
## 3 c
## 4 d
答案 2 :(得分:4)
我们可以使用replace
replace(df, !mask, "")
# x y
#1 e
#2 f
#3 c
#4 d