我有这样的数据框:
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但它不工作。
有人知道怎么做没有循环?
像这样的东西?
which(apply(df, 2, function(x) any(grepl("a", x))))
步骤是:
- 同
apply
仔细阅读每一栏
- 搜索是否
a
在这个专栏中 grepl
- 因为我们得到了一个向量,所以请使用
any
要得到 TRUE
如果有任何元素匹配 a
- 最后检查
which
元素(列)是 TRUE
(即包含搜索到的信件 a
)。
像这样的东西?
which(apply(df, 2, function(x) any(grepl("a", x))))
步骤是:
- 同
apply
仔细阅读每一栏
- 搜索是否
a
在这个专栏中 grepl
- 因为我们得到了一个向量,所以请使用
any
要得到 TRUE
如果有任何元素匹配 a
- 最后检查
which
元素(列)是 TRUE
(即包含搜索到的信件 a
)。
既然你提到你试图使用 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()
如果你只想要列号。