r - filter_all 具有相对列位置(在任何列中过滤。然后在 n+2 列中)
问题描述
关于如何在 col 规范中用or表示n+2的简短问题。filter_all
filter
我需要搜索一个特定的值,两个列。离开,按特定值,而不使用 col。名字
数据
我有一个来自文本处理的df(在古法语中,顺便说一句)。每行代表一行文本。这是该 df 的摘录(简化)。它在上校之后继续。SYLL_TAG4-1 到 SYLL_TAG20。
meter SYLL_TAG1 `SYLL_TAG1 -1` SYLL_TAG2 `SYLL_TAG2 -1` SYLL_TAG3 `SYLL_TAG3 -1` SYLL_TAG4 `SYLL_TAG4 -1` SYLL_TAG5 `SYLL_TAG5 -1`
1 11 jo NA më NA crend NA rei NA ë NA
2 11 ë NA dit NA al NA cun NA të NA
3 11 liv NA rez NA lë NA mei NA jo NA
4 11 dist NA ar NA ce NA ves NA quë NA
5 11 dë NA voz NA ma NA na NA ces NA
6 11 mais NA u NA në NA cho NA së NA
7 11 jo NA oi NA al NA cor NA ner NA
8 11 si re a NA pιed NA es NA tes NA
9 11 jo NA ai NA cun NA té NA i NA
10 11 est NA reu NA li NA tind NA rent NA
11 11 a NA ces te es NA pe NA ë NA
这是重现 df 的代码(对不起,冗长):
PAM_JO <- structure(list(meter = c(11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11), SYLL_TAG1 = c("jo", "ë", "liv", "dist", "dë", "mais",
"jo", "si", "jo", "est", "a"), `SYLL_TAG1 -1` = c("NA", "NA",
"NA", "NA", "NA", "NA", "NA", "re", "NA", "NA", "NA"), SYLL_TAG2 = c("më",
"dit", "rez", "ar", "voz", "u", "oi", "a", "ai", "reu", "ces"
), `SYLL_TAG2 -1` = c("NA", "NA", "NA", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "te"), SYLL_TAG3 = c("crend", "al", "lë",
"ce", "ma", "në", "al", "pιed", "cun", "li", "es"), `SYLL_TAG3 -1` = c("NA",
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA"),
SYLL_TAG4 = c("rei", "cun", "mei", "ves", "na", "cho", "cor",
"es", "té", "tind", "pe"), `SYLL_TAG4 -1` = c("NA", "NA",
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA"), SYLL_TAG5 = c("ë",
"të", "jo", "quë", "ces", "së", "ner", "tes", "i", "rent",
"ë"), `SYLL_TAG5 -1` = c("NA", "NA", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "NA", "NA"), SYLL_TAG6 = c("quë", "jo",
"en", "jo", "cul", "vos", "quë", "ë", "ad", "nei", "quë"
), `SYLL_TAG6 -1` = c("NA", "NA", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "NA", "NA"), SYLL_TAG7 = c("vos", "në",
"fe", "i", "vert", "soi", "guai", "jo", "mais", "mes", "jo"
), `SYLL_TAG7 -1` = c("NA", "NA", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "NA", "NA"), SYLL_TAG8 = c("vos", "vus",
"rai", "rai", "jo", "jo", "res", "sui", "quë", "ë", "ai"
), `SYLL_TAG8 -1` = c("NA", "NA", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "NA", "NA"), SYLL_TAG9 = c("mes", "aim",
"la", "par", "ai", "ben", "në", "a", "sept", "jo", "cein"
), `SYLL_TAG9 -1` = c("NA", "NA", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "NA", "te"), SYLL_TAG10 = c("li", "ni",
"jus", "mun", "es", "gua", "viv", "ce", "li", "ce", "i"),
`SYLL_TAG10 -1` = c("NA", "NA", "NA", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "NA"), SYLL_TAG11 = c("sez", "ent", "ti",
"chef", "soign", "rant", "rat", "val", "we", "rans", "ci"
), `SYLL_TAG11 -1` = c("NA", "NA", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "NA", "NA"), SYLL_TAG12 = c("NA", "NA",
"ce", "NA", "NA", "NA", "NA", "NA", "es", "NA", "NA"), `SYLL_TAG12 -1` = c("NA",
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA"
), NUM_L = c(257, 306, 498, 799, 1232, 1520, 2106, 2136,
2757, 3111, 3830)), row.names = c(NA, -11L), class = c("tbl_df",
"tbl", "data.frame"))
任务
我想找到与特定文本上下文匹配的行。
a) 查找包含单词的行:easy!
首先,我想对其进行过滤,以便在列中获得包含单词“jo”并且在meter col 中具有值“11”的每一行。简单的:
library(tidyverse)
PAM_text_tag %>%
filter_all(any_vars(. == "jo")) %>%
filter(meter=="11")
这实际上就是上面说明的 df 的原因。
b) 查找包含一个单词的行,后跟两个 col。远离特定内容
但现在我希望能够过滤它以仅获取包含“jo”后跟元音初始单词的行。鉴于 df 的结构(我不想改变),我必须看看“jo”之后的两列会发生什么:如果“jo”在 SYLL_TAG3 中,则 SYLL_TAG3-1 中没有任何内容,我需要检查 SYLL_TAG4 是否以元音开头。
目标:过滤后的输出应仅包含第 4、5、6、8、10 和 12 行(仅包含包含“jo”的单元格后跟一个空单元格,然后是一个以元音开头的单元格的行)。
我的问题
问题是:如何在不使用 col 的情况下在列的位置表达n+2的东西。名字?(我不知道“jo”会出现在哪一列)
补充材料
该文本中使用的所有元音列表:
aeiouyäëïöüÿáéíóúàèìòùâêîôû
我想我只需要使用str_detect
withpattern="^[aeiouyäëïöüÿáéíóúàèìòùâêîôû]"
来匹配元音初始词。我的问题更多是关于如何表达n+2的事情,而不是关于filter
.
解决方案
这是一个基本的 R 选项:
#Get the row column index where 'jo' is present
mat <- which(PAM_JO == 'jo', arr.ind = TRUE)
#Add 1 to column index to compare with NA
mat1 <- cbind(mat[, 1], mat[, 2] + 1)
#Add 2 to column index to compare with vowels
mat2 <- cbind(mat[, 1], mat[, 2] + 2)
#convert to dataframe
PAM_JO <- data.frame(PAM_JO)
#Create a logical vector
inds <- PAM_JO[mat1] == 'NA' & grepl('^[aeiou]', PAM_JO[mat2])
#Subset the data
result <- PAM_JO[mat[, 1][inds], ]
推荐阅读
- django - When running my docker image for my Django project I'm getting a "ModuleNotFoundError: No module named 'try_django'" error
- saml - OneLogin 不传回 SAML RelayState
- pine-script - 无法在我的策略中弹出 TradingView 警报
- javascript - svg 将文本大纲合并为一个完整的大纲
- button - 将继续购物按钮添加到 woocommerce 购物车页面,更新购物车左侧
- c++ - 由于我在某些时候使标志易变,因此标志的值应该改变。但它只在 t 线程上无限等待
- html - 图像的 Ruby 样式无法正确调整图片大小
- ada - 我如何总结 3 个最高的浮点数,而不是 txt 文件中的所有浮点数?
- jenkins - 如何将 jenkins.currentBuild.result 显示为“SUCCESS”而不是“null”
- datatables - 结合列数据和其他表数据的服务器端数据表