这是我的数据
df<-read.table(text="A1 A2 AA2 A3 APP3 AA4 A4
17 17 14 18 18 14 17
16 15 13 16 19 15 19
17 14 12 19 15 18 14
17 16 16 18 19 19 20
19 18 12 18 13 17 17
12 19 17 18 16 20 18
20 18 14 13 15 15 16
18 20 12 20 12 12 18
12 15 18 14 16 18 18",h=T)
我想选择只有一个A的列,即
A1 A2 A3 A4
17 17 18 17
16 15 16 19
17 14 19 14
17 16 18 20
19 18 18 17
12 19 18 18
20 18 13 16
18 20 20 18
12 15 14 18
我使用了以下代码:
df1<- df%>%
select(contains("A"))
但是它给了我所有以A开头的
是否可以获取表2?感谢您的帮助。
答案 0 :(得分:1)
您可以将(defmacro block [ctx & expr]
`(let [~@(mapcat (fn [[k v]] [k v]) ctx)] ~@expr))
(defmacro uia [metadata ctx arity & expr]
`(block ~metadata
(fn ~arity
(doseq [m# ~ctx]
(prn "got" ~arity (:et m#) (:s m#) ~'mt)))))
(def auto1
(uia {mt "dt"}
[{:et "wa" :s "a1"}
{:et "wa" :s "a2"}
{:et "um" :s "a3"}]
[et1 id cid]
(block {} (prn "auto1"))))
(let [myarr ["x" 11 22]] (apply auto1 myarr))
与正则表达式模式一起使用。 {完全包含1个'A'的模式就是这个matches()
"^[^A]*A[^A]*$"
根据评论,我最想知道的是名称以P开头且P仅包含数字之后的列:
df %>% select(matches("^[^A]*A[^A]*$"))
# A1 A2 A3 A4
# 1 17 17 18 17
# 2 16 15 16 19
# 3 17 14 19 14
# 4 17 16 18 20
# ...
答案 1 :(得分:1)
如果您对RegEx不太满意,这是另一种解决方案,
第一步是创建一个函数,该函数计算字符串向量中“ A”的数量,我将通过创建一个临时的列名称向量来删除所有的“ A”,然后减去新的数字来做到这一点。原始字符。
count_a<-function(vector,char){
vec2<-gsub("A","",vector, fixed=T)
numb_As<-nchar(vector)-nchar(vec2)
return(numb_As)
}
具有此功能后,您只需将其应用于数据集的姓,然后将数据限制为计数等于1的列即可。
As<-count_a(colnames(df))
df[,As==1]