我有一个数据集,其中包含具有各种元素及其错误的列
(例如Pb,Pb误差,Cu,Cu。误差,Zn,Zn误差,Fe,Fe误差)。
如何按名称选择多个列(例如,我要选择Pb,Pb.error,Zn,Zn.error)?
我尝试过:
subset(myData, select = (grep("Pb", dataTitle)))
对一个元素及其错误都适用(我可以选择Pb和Pb错误)。
但不适用于多个元素及其错误:
subset(myData, select = (grep("Pb", dataTitle)|grep("Zn", dataTitle)))
上面的代码显示了我拥有的所有元素(即,它无法选择任何特定的列)。我很困惑,不知道背后的原因。
我也尝试过
subset(myData, select = c("Pb","Pb.Error","Zn","Zn.Error"))
这对我来说非常有效,但是我想知道是否可以简化一下,因为我相信可以同时选择“ Pb”和“ Pb.error”。
答案 0 :(得分:0)
提出这个问题后1分钟我才得到答案。 如果仅在grep函数中使用“ Pb | Zn”,那很容易
subset(myData, select(grep("Pb|Zn", dataTitle)))
那对我来说很完美。
答案 1 :(得分:0)
这同样适用,除非您专门尝试通过将error列与它们各自的数据列相关联来调用它们:
myData[,c("Pb","Pb.Error","Zn","Zn.Error")]
答案 2 :(得分:0)
这是对正则表达式有更多限制的另一种方式:
df <- tibble(
Pb = NA, Pb.error = NA, Cu = NA, Cu.error = NA, Zn = NA, Zn.error = NA, Fe = NA, Fe.error = NA
)
df[, grepl("^(Pb|Zn).*$", names(df))]