很抱歉,如果它太基础了,但我不熟悉R。
我有一个包含多个具有相同列名的列的数据框,因此在导入到R之后,添加了标识符。像这样:
A = c(2, 3, 5)
A.1 = c('aa', 'bb', 'cc')
A.2 = c(TRUE, FALSE, TRUE)
B = c(1, 2, 5)
B.1 = c('bb', 'cc', 'dd')
B.2 = c(TRUE, TRUE, TRUE)
df = data.frame(A, A.1, A.2, B, B.1, B.2)
df
A A.1 A.2 B B.1 B.2
1 2 aa TRUE 1 bb TRUE
2 3 bb FALSE 2 cc TRUE
3 5 cc TRUE 5 dd TRUE
我想提取所有A
的列,无论标识符扩展名是什么,所以它变成了:
A A.1 A.2
1 2 aa TRUE
2 3 bb FALSE
3 5 cc TRUE
我知道我们可以
df2 = df[, c("A", "A.1", "A.2")]
但我有很多这种类型的列,所以我不想单独输入。我确信有聪明的方法可以做到这一点。
谢谢!
答案 0 :(得分:3)
尝试此操作以获取名称以“A”
开头的所有列df2 = df[, grepl("^A", names( df))]
R的提取'['
- 函数允许在其双参数模式中使用逻辑索引。您会发现R中的正则表达式函数非常有用,我建议您阅读?regex
以及查找@G的SO和Rhelp Archives上的示例。格罗滕迪克
答案 1 :(得分:1)
library(stringr)
A = c(2, 3, 5)
A.1 = c('aa', 'bb', 'cc')
A.2 = c(TRUE, FALSE, TRUE)
B = c(1, 2, 5)
B.1 = c('bb', 'cc', 'dd')
B.2 = c(TRUE, TRUE, TRUE)
df = data.frame(A, A.1, A.2, B)
df[,str_detect(names(df),'A')]
A A.1 A.2
1 2 aa TRUE
2 3 bb FALSE
3 5 cc TRUE
#If you want to find out A or B.
A = c(2, 3, 5)
A.1 = c('aa', 'bb', 'cc')
A.2 = c(TRUE, FALSE, TRUE)
B = c(1, 2, 5)
B.1 = c('bb', 'cc', 'dd')
F.2 = c(TRUE, TRUE, TRUE)
df = data.frame(A, A.1, A.2, B,F.2)
df[,str_detect(names(df),'A|B')]
A A.1 A.2 B
1 2 aa TRUE 1
2 3 bb FALSE 2
3 5 cc TRUE 5
答案 2 :(得分:0)
如果我们使用tidyverse
,则starts_with
是单向的
library(tidyverse)
df %>%
select(starts_with("A"))
# A A.1 A.2
#1 2 aa TRUE
#2 3 bb FALSE
#3 5 cc TRUE