r - 从R中多列的df中仅​​选择一个字符值

标签 r dataframe filter

所以我有一个包含 5 列的 df(col1、col2、col3、col4、长度)。第 1:4 列随机包含值 A 到 F 或包含 NA。我想创建一个新的 df ,它只包含值 F 和它附带的长度值。 df 的第一行是:

   col1 col2 col3 col4 length
1  A    B    F    C    15
2  F    D    E    A    12
3  F    F    NA   NA   3
4  F    NA   NA   NA   8 
5  A    D    C    A    11
6  F    F    F    F    10

我想保留第 3、4 和 6 行。

每次我选择值 F 时,我都会得到一个新的 df,它在第一列中包含 F,但我也没有成功包含其他列,然后它会在 col2 或 col3 中显示 A:E。我想要一个仅包含 F 或 NA 的 df。

如果我尝试这样的事情:

selected_new <- selected_df[selected_df$col1 == "F" & selected_df$col2 == "F" &
                            selected_df$col3 == "F" & selected_df$col4 == "F", ]

它显示了每个单元格中都有 F 的 df,如示例中的第 6 行。但这样第 3 行和第 4 行的信息就会丢失,并且不会包含在 df 中。我尝试过此代码的变体,但我没有弄清楚。

如果有人可以帮忙,谢谢!

任何变体,包括“|”等逻辑运算符或“&”并没有让我走得太远,并继续显示除 F 或 NA 之外的其他值。

最佳答案

使用matrixStats::rowAlls

d[matrixStats::rowAlls(is.na(d[1:4]) | d[1:4] == 'F'), ]
#   col1 col2 col3 col4 length
# 3    F    F <NA> <NA>      3
# 4    F <NA> <NA> <NA>      8
# 6    F    F    F    F     10

或者只是基础 R

d[rowSums(is.na(d[1:4]) | d[1:4] == 'F') == 4, ]
#   col1 col2 col3 col4 length
# 3    F    F <NA> <NA>      3
# 4    F <NA> <NA> <NA>      8
# 6    F    F    F    F     10

数据:

d <- structure(list(col1 = c("A", "F", "F", "F", "A", "F"), col2 = c("B", 
"D", "F", NA, "D", "F"), col3 = c("F", "E", NA, NA, "C", "F"), 
    col4 = c("C", "A", NA, NA, "A", "F"), length = c(15L, 12L, 
    3L, 8L, 11L, 10L)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))

关于r - 从R中多列的df中仅​​选择一个字符值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76770045/

相关文章:

r - 当所有出现的自变量均为 NA 时的线性模型

R:XPath 表达式返回所选元素之外的链接

arrays - 从另一个数组中过滤一个数组

css - Internet Explorer CSS 属性 "filter"忽略溢出 :visible

ruby - 如何过滤 Sinatra 记录器中的密码字段?

r - 如何使 data.frame 中的组等长?

r - R中如何用一个因子来运算两个变量

python - 在 Python 中转换为数据框

python - Pandas 将列内容与关键字匹配(带有空格和括号)

python - 如果值列表出现在 Pandas 数据框的任何列中,如何打印行