Select()
是 R 语言中 dplyr
包提供的一个函数,用于选择(提取) 数据框(data frame)中的特定列(变量)。
select()
函数会返回一个新的数据框,其中只包含选择的列。原始数据框不会被修改。如果需要在原始数据框上进行就地修改,可以使用赋值操作符(例如,df <- select(df, Name, Salary)
)。
select(.data,...)
.data
表示要选择列的数据框;
-
...
: 要选择或排除的列。您可以使用以下方式来指定列:使用指定列名:
select(data, col1, col2, col3)
,其中col1
、col2
和col3
是数据框中的列名。使用冒号(
:
)范围描述符:select(data, col1:col3)
,选择从col1
到col3
之间的所有列。 要确保是根据原表中列标题头的顺序来的,否则会出现问题!如果是col2 col3 col1 的顺序,实际col1:col3只会匹配出col1和col3字段!使用减号(
-
)组合:select(data, col1, -col2)
,选择col1
列并排除col2
列。 select提取的逻辑。第一步为df1=data;其后有指定列,进一步提取df1形成df2。无,则df2=df1;-col* 排除列,基于df2上排除col* 列,形成df3。 所以select(data, col1, -col2)结果是?是col1。 -
指定前缀或后缀:
starts_with()
,选择以指定前缀开头的列;ends_with()
,选择以指定后缀开头的列;contains()
,选择包含关键字的列字段名;matches()
,匹配正则表达式。 -
使用
one_of()
:select(data, one_of(c("col1", "col2", "col3")))
,选择在指定向量中的列。
# 选择特定列
selected_cols <- select(data, col1, col2, col3)
# 选择范围内的列
selected_cols <- select(data, col1:col3)
# 排除特定列col2,其他列都选上
selected_cols <- select(data, -col2)
# 使用函数选择特定前缀的列
selected_cols <- select(data, starts_with("prefix"))
# 使用one_of选择列
selected_cols <- select(data, one_of(c("col1", "col2", "col3")))
everything()需要根据使用场景进一步完善¶
everything()
是dplyr
包中的一个函数,用于选择或排除特定列的同时,仍保留其他所有列。
1,将指定列前置:将col3列取出前置,剩余的其他列排在后面
selected_cols <- select(data, col3, everything())
2, 选择除特定列外的所有列:
selected_cols <- select(data, -col1, -col2, everything())
上述代码将选择除col1
和col2
之外的所有列。这里感觉多此一举,但在其他的情况下应该有用,如在不适用select的情况下,剔除某些列,对指定列进行操作?
[[one_of()]] 函数,待完善¶
其功能有些不明确。
假设有一个包含以下列的数据框data
:
data <- data.frame(
col1 = 1:5,
col2 = letters[1:5],
col3 = LETTERS[1:5],
col4 = c(TRUE, FALSE, TRUE, FALSE, TRUE),
col5 = 11:15
)
col2
和col4
列,可以使用one_of()
函数如下:
selected_cols <- select(data, one_of(c("col2", "col4")))
data
中列名为col2
和col4
的列。
contain()函数扩展-R中的正则表达式符号¶
在R中,正则表达式是一种用于匹配和操作文本模式的强大工具。正则表达式由一系列字符和特殊符号组成,用于定义模式。
.
:匹配任意字符(除了换行符)。^
:匹配字符串的开头。$
:匹配字符串的结尾。*
:匹配前面的元素零次或多次。+
:匹配前面的元素一次或多次。?
:匹配前面的元素零次或一次。[]
:匹配括号内的任意字符。()
:创建捕获组,用于提取匹配的子字符串。|
:表示逻辑或,匹配两个或多个模式之一。\
:转义字符,用于转义特殊字符,使其失去其特殊含义。
下面是一些案例,展示了如何在实际情况中使用正则表达式:
- 电话号码提取:
假设您有一个包含文本的字符串,其中包含电话号码。您可以使用正则表达式来提取这些电话号码。例如:
text <- "请联系我:电话号码是:+1-123-456-7890。"
phone_numbers <- gregexpr("\\+\\d{1}-\\d{3}-\\d{3}-\\d{4}", text, perl = TRUE)
extracted_numbers <- regmatches(text, phone_numbers)
print(extracted_numbers)
输出结果为:
[1] "+1-123-456-7890"
在上述示例中,我们使用正则表达式 \\+\\d{1}-\\d{3}-\\d{3}-\\d{4}
来匹配电话号码的模式。然后,使用 gregexpr()
函数找到字符串中匹配的位置,并使用 regmatches()
函数提取匹配的子字符串。
- 邮箱地址验证:
假设您有一个包含多个邮箱地址的向量,您想要验证这些邮箱地址是否有效。您可以使用正则表达式来检查邮箱地址的格式。例如:
emails <- c("example@example.com", "invalid_email", "another@example.com")
valid_emails <- grep("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", emails, value = TRUE)
print(valid_emails)
输出结果为:
[1] "example@example.com" "another@example.com"
在上述示例中,我们使用正则表达式 ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$
来验证邮箱地址的格式。使用 grep()
函数和参数 value = TRUE
,我们可以找到符合正则表达式模式的有效邮箱地址。