这可能看起来相当琐碎,但我几乎不知道任何 R 并且 google-fu 没有帮助。
所以,场景如下: 我有一个包含 37 列的数据框,我需要对其进行过滤,只保留那些在 2 列(EMPRESA、PAIS)中的任何列中包含某个字符串的行。
到目前为止我尝试过的:
if(input$ExperienciasSearchHidden == "")
{
}
else
{
print(colnames(DFfilters))
DFfilters <- DFfilters [which (
DFfilters$EMPRESA == "ESPAÑAAA"
& DFfilters$PAIS == "ESPAÑAAA"
)
,]
}
输出(错误):
Warning: Error in if: missing value where TRUE/FALSE needed
[No stack trace available]
任何帮助将不胜感激!
答案 0 :(得分:1)
带有子集的代码的第二部分没有任何问题,但问题出在 if 语句中。 input$ExperienciasSearchHidden
很可能是 NA。
DFfilters=data.frame(EMPRESA=c("a", "ESPAÑAAA", "b"), PAIS=c(NA,"ESPAÑAAA", "a"), stringsAsFactors = FALSE)
DFfilters [which (
DFfilters$EMPRESA == "ESPAÑAAA"
& DFfilters$PAIS == "ESPAÑAAA"
)
,]
EMPRESA PAIS
2 ESPAÑAAA ESPAÑAAA
NA==""
NA
if (NA) {
print("problem")
}
Error in if (NA) { : missing value where TRUE/FALSE needed
答案 1 :(得分:0)
在没有可重现数据的情况下,这里有一个模拟数据的解决方案:
library(dplyr)
df %>%
rowwise() %>%
filter(any(str_detect(c_across(), 'EMPRESA|PAIS')))
# A tibble: 3 x 2
# Rowwise:
v1 v1.1
<chr> <chr>
1 x PAIS
2 EMPRESA x
3 x EMPRESA
数据:
df <- data.frame(
v1 = c("x", "EMPRESA", "y", "z", "x"),
v1 = c("PAIS", "x", "y", "z", "EMPRESA")
)