跳转至

Select()

是 R 语言中 dplyr 包提供的一个函数,用于选择(提取) 数据框(data frame)中的特定列(变量)

select() 函数会返回一个新的数据框,其中只包含选择的列。原始数据框不会被修改。如果需要在原始数据框上进行就地修改,可以使用赋值操作符(例如,df <- select(df, Name, Salary))。

select(.data,...)

.data 表示要选择列的数据框;

  • ...: 要选择或排除的列。您可以使用以下方式来指定列:

    使用指定列名:select(data, col1, col2, col3),其中col1col2col3是数据框中的列名。

    使用冒号(:范围描述符:select(data, col1:col3),选择从col1col3之间的所有列。 要确保是根据原表中列标题头的顺序来的,否则会出现问题!如果是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())

上述代码将选择除col1col2之外的所有列。这里感觉多此一举,但在其他的情况下应该有用,如在不适用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
)
1. 选择特定列: 假设我们想选择col2col4列,可以使用one_of()函数如下:
selected_cols <- select(data, one_of(c("col2", "col4")))
这将选择数据框data中列名为col2col4的列。

contain()函数扩展-R中的正则表达式符号

在R中,正则表达式是一种用于匹配和操作文本模式的强大工具。正则表达式由一系列字符和特殊符号组成,用于定义模式。

  1. .:匹配任意字符(除了换行符)。
  2. ^:匹配字符串的开头
  3. $:匹配字符串的结尾
  4. *:匹配前面的元素零次或多次
  5. +:匹配前面的元素一次或多次
  6. ?:匹配前面的元素零次或一次
  7. []:匹配括号内的任意字符。
  8. ():创建捕获组,用于提取匹配的子字符串。
  9. |:表示逻辑或,匹配两个或多个模式之一。
  10. \:转义字符,用于转义特殊字符,使其失去其特殊含义。

下面是一些案例,展示了如何在实际情况中使用正则表达式:

  1. 电话号码提取:

假设您有一个包含文本的字符串,其中包含电话号码。您可以使用正则表达式来提取这些电话号码。例如:

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() 函数提取匹配的子字符串。

  1. 邮箱地址验证:

假设您有一个包含多个邮箱地址的向量,您想要验证这些邮箱地址是否有效。您可以使用正则表达式来检查邮箱地址的格式。例如:

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,我们可以找到符合正则表达式模式的有效邮箱地址。