R:识别数据框中的列名是否包含字符串
R: To identify whether column names in a dataframe contains string
假设我有 2 个数据帧:
df1:
Name Data123 Data321 Age
A 123 321 20
df2:
Name Age
B 20
我想检查哪个数据框的列名包含字符串 "Data"。如果是,则将数据帧作为一个整体传递到自定义函数中。因此,在这种情况下,我希望只将 df1 传递给所述函数。请指教
我们可以使用带有 grepl
的函数来实现可重用性(来自 base R
),用 any
包装到 return 单个 TRUE/FALSE(如果有是一个包含子字符串 'Data' 或不包含的列名),这可以用于上述目的
f1 <- function(dat, pat) any(grepl(pat, names(dat)))
f1(df1, '^Data')
f1(df2, '^Data')
或 startsWith
f1 <- function(dat, pat) any(startsWith(names(dat), pat))
f1(df1, 'Data')
您可以使用 stringr
包中的 str_detect()
:
library(stringr)
#does any (column) name inside df1 contains "Data"?
any(str_detect(names(df1), "Data"))
数据:
df1 <- data.frame(Name = "A", Data123 = 123, Data321 = 321, Age = 20)
df2 <- data.frame(Name = "B", Age = 20)
假设我有 2 个数据帧:
df1:
Name Data123 Data321 Age
A 123 321 20
df2:
Name Age
B 20
我想检查哪个数据框的列名包含字符串 "Data"。如果是,则将数据帧作为一个整体传递到自定义函数中。因此,在这种情况下,我希望只将 df1 传递给所述函数。请指教
我们可以使用带有 grepl
的函数来实现可重用性(来自 base R
),用 any
包装到 return 单个 TRUE/FALSE(如果有是一个包含子字符串 'Data' 或不包含的列名),这可以用于上述目的
f1 <- function(dat, pat) any(grepl(pat, names(dat)))
f1(df1, '^Data')
f1(df2, '^Data')
或 startsWith
f1 <- function(dat, pat) any(startsWith(names(dat), pat))
f1(df1, 'Data')
您可以使用 stringr
包中的 str_detect()
:
library(stringr)
#does any (column) name inside df1 contains "Data"?
any(str_detect(names(df1), "Data"))
数据:
df1 <- data.frame(Name = "A", Data123 = 123, Data321 = 321, Age = 20)
df2 <- data.frame(Name = "B", Age = 20)