如何在r中获取列名称作为字符串

问题描述 投票:0回答:2

我正在努力解决这个愚蠢的问题,我似乎找不到解决方案

我有一个数据框,我需要获取字符串形式的列名称。

例如出

df$month 

我想要“月”。我需要将其自动化,以便它可以推广到

data$variable

和输出

 "variable"

适用于任何数据框和变量名称。

提前感谢这位救星

r string dataframe text-parsing
2个回答
0
投票

由于

data$var
返回一个值向量,这里有一个
dplyr
解决方案:

library(dplyr)
data %>% 
  select(variable) %>% 
  colnames()

一个例子:

iris %>% 
  select(Species) %>% 
  colnames()

输出:

[1] "Species"

0
投票

您问的问题很好,但答案比应有的要复杂得多。 在 R 中从数据名称到字符串的转换是一个困难的过程,通常最好避免。但是,如果您真的需要以字符串形式获取数据帧列的名称,则此函数将完成这项工作:

columnName <- function(ColumnReference) {
  return(substring(deparse(substitute(ColumnReference)),which(strsplit(deparse(substitute(ColumnReference)),"")[[1]]=="$")[1]+1))
}

例如:

columnName(df$month)

退货:

"month"

"variable"
得到
data$variable
,过程是完全一样的:

columnName(data$variable)

工作原理:

deparse(substitute(ColumnReference))
返回您在括号中输入的任何内容作为字符串。因此,如果
ColumnReference == df$variable
,这部分代码将返回
"df$variable"
。当然,我们只想要字符串的最后一部分,即
"$"
之后的部分。因此,为了获取字符串的一部分,我们使用
substring(string, first)
函数。 substring 函数中的第二个参数确定从字符串中开始剪切子字符串的位置。在我们的例子中,这将是
"$"
字符的索引,再加一,以便
"$"
字符不包含在我们的子字符串中。可以使用代码
x
获取字符
y
在字符串
which(strsplit(y, "")[[1]] == x)
中出现的位置列表。由于我们只查找
"$"
的一次出现,因此我们会将
[1]
添加到该代码的末尾。所以这个函数总的来说是这样的:

return(
  substring(
    text = input as string,
    first = index of "$" in (input as string)
      + 1
  )
)

这是该功能的组织布局:

columnName <- function(ColumnReference) {
  return(
    substring(
      text = deparse(substitute(ColumnReference)),
      first = which(strsplit(deparse(substitute(ColumnReference)),"")[[1]]=="$")[1] + 1
    )
  )
}

我希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.