所以我有一个包含 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/