我有这样的数据框:
df <- data.frame(col1 = c(letters[1:4],"a"),col2 = 1:5,col3 = letters[10:14])
df
col1 col2 col3
1 a 1 j
2 b 2 k
3 c 3 l
4 d 4 m
5 a 5 n
我想找到df
列的索引,其值与字符串“a”匹配。
即它应该给我1
作为结果。
我尝试使用它在sapply但它不工作。
任何人都知道怎么做没有循环?
答案 0 :(得分:13)
这样的东西?
which(apply(df, 2, function(x) any(grepl("a", x))))
步骤如下:
apply
遍历每一栏a
grepl
any
匹配,请使用TRUE
获取a
which
元素(列)是TRUE
(即包含搜索到的字母a
)。答案 1 :(得分:3)
既然你提到你试图使用sapply()
但是没有成功,那么你可以这样做:
> sapply(df, function(x) any(x == "a"))
col1 col2 col3
TRUE FALSE FALSE
> which(sapply(df, function(x) any(x == "a")))
col1
1
当然,如果您更喜欢字符串匹配,也可以使用grep()
/ grepl()
方法。如果您只想要列号,也可以使用which()
包裹unname()
函数。