R 如何获取列名和列索引

R 如何获取列名和列索引,r,dataframe,columnname,R,Dataframe,Columnname,嗨,我有下面的数据框。由于该列包含NA,因此该列的数据类型为character。现在,我需要获取只包含字符串值的列名和索引 在下面的示例中,我想获得Zo-A和Zo-B的列名和列索引: ZONE-1 Zo-A Zone-3 Zo-B 58 On 75 NA 60 NA NA High NA Off

嗨,我有下面的数据框。由于该列包含NA,因此该列的数据类型为
character
。现在,我需要获取只包含字符串值的列名和索引

在下面的示例中,我想获得Zo-A和Zo-B的列名和列索引:

 ZONE-1        Zo-A         Zone-3        Zo-B
 58            On             75          NA
 60            NA             NA          High
 NA            Off            68          Low
 70            On             NA          NA
到目前为止,我试图首先将它们转换为数字,这为Zo-A和Zo-B列创建了NA。如果我使用下面的代码作为列索引,我得到的结果是NA

a <- which(colnames(df)=="Zo-A" )
integer(0)

match_col <- match(c("Zo-A","Zo-B")names(df))
NA NA

a就我对你问题的理解而言,你想要或需要的东西非常非常简单

首先,读取中的数据

df <- read.table(text = "
ZONE-1        Zo-A         Zone-3        Zo-B
 58            On             75          NA
 60            NA             NA          High
 NA            Off            68          Low
 70            On             NA          NA
", header = TRUE, check.names = FALSE)

str(df)
'data.frame':   4 obs. of  4 variables:
 $ ZONE-1: int  58 60 NA 70
 $ Zo-A  : Factor w/ 2 levels "Off","On": 2 NA 1 2
 $ Zone-3: int  75 NA 68 NA
 $ Zo-B  : Factor w/ 2 levels "High","Low": NA 1 2 NA

df
  ZONE-1 Zo-A Zone-3 Zo-B
1     58   On     75 <NA>
2     60 <NA>     NA High
3     NA  Off     68  Low
4     70   On     NA <NA>
现在问题(2),获取“相同”的列索引。(我想这是你要的
Zo-A
列。)


a就我对你问题的理解而言,你想要或需要的东西非常非常简单

首先,读取中的数据

df <- read.table(text = "
ZONE-1        Zo-A         Zone-3        Zo-B
 58            On             75          NA
 60            NA             NA          High
 NA            Off            68          Low
 70            On             NA          NA
", header = TRUE, check.names = FALSE)

str(df)
'data.frame':   4 obs. of  4 variables:
 $ ZONE-1: int  58 60 NA 70
 $ Zo-A  : Factor w/ 2 levels "Off","On": 2 NA 1 2
 $ Zone-3: int  75 NA 68 NA
 $ Zo-B  : Factor w/ 2 levels "High","Low": NA 1 2 NA

df
  ZONE-1 Zo-A Zone-3 Zo-B
1     58   On     75 <NA>
2     60 <NA>     NA High
3     NA  Off     68  Low
4     70   On     NA <NA>
现在问题(2),获取“相同”的列索引。(我想这是你要的
Zo-A
列。)


a要获得此信息,我们可以使用以下代码:

K=sapply(df,function(x)any(grepl("\\D+",x)))
 names (df)[K]
    Zo.A Zo.B 

 Which (k)
   Zo.A Zo.B 
     2    4 

要获得此信息,我们可以使用以下代码:

K=sapply(df,function(x)any(grepl("\\D+",x)))
 names (df)[K]
    Zo.A Zo.B 

 Which (k)
   Zo.A Zo.B 
     2    4 

读取data.frame时,您可以指定'stringsAsFactors=FALSE',如果您的数据本身包含NA作为字符串“NA”,则您可以在read.csv设置中指定此参数NA.strings=c(“NA”)

然后尝试:

type = sapply(df,class) 
indexes = which(type=='character')
nameofindexes = names(indexes)

读取data.frame时,您可以指定'stringsAsFactors=FALSE',如果您的数据本身包含NA作为字符串“NA”,则您可以在read.csv设置中指定此参数NA.strings=c(“NA”)

然后尝试:

type = sapply(df,class) 
indexes = which(type=='character')
nameofindexes = names(indexes)


colnames中不允许破折号,因此它被转换为
,至少在我尝试时是这样),请尝试:
,默认情况下,它使用破折号(colnames(df)=“Zo.A”)
。我的实际列名很大,有很多破折号。我的数据集中有大约100列。因此,将它们全部转换为“.”将是困难的。不,这是一个问题,只有通过自己读取数据,您才能共享一些输入(dput)?
a我想知道您是否尝试了我的代码,因为它为我提供了您所需的精确列名。colnames中不允许使用破折号,因此它被转换为
,至少在我尝试时是这样),try:
其中(colnames(df)=“Zo.A”)
默认情况下需要破折号。我的实际列名很大,有很多破折号。我的数据集中有大约100列。因此,将它们全部转换为“.”将是困难的。不,这是问题所在,只有自己读取数据,您才能共享一些输入(dput)?
a我想知道您是否尝试过我的代码,因为它为我提供了您所需的精确列名。谢谢。但是,这种方法不适合我的情况。1.我正在使用read.csv 2读取文件。我只需要那些列名,它由“on”、“off”等值组成,而不是由数值组成的列。3.我总共有100列,其中大约50列由“开”、“关”等值组成。因此,很难按照上述方法查找列names@Anagha如果您只需要列名,也许应该尝试使用
readLines
读取它们。设置参数
n=1
,它最多读取一行,列标题应该位于的第一行。如果这样做有效,您将获得这些名称的字符向量,无需额外工作。然后使用
which
grep
获取所需列的索引。不,readLines没有给出我需要的结果。我更喜欢阅读。csv@Anagha我刚刚编辑了我的答案,看看这个问题是否可以用最后的
grep
解决。对不起,没有。谢谢。但是,这种方法不适合我的情况。1.我正在使用read.csv 2读取文件。我只需要那些列名,它由“on”、“off”等值组成,而不是由数值组成的列。3.我总共有100列,其中大约50列由“开”、“关”等值组成。因此,很难按照上述方法查找列names@Anagha如果您只需要列名,也许应该尝试使用
readLines
读取它们。设置参数
n=1
,它最多读取一行,列标题应该位于的第一行。如果这样做有效,您将获得这些名称的字符向量,无需额外工作。然后使用
which
grep
获取所需列的索引。不,readLines没有给出我需要的结果。我更喜欢阅读。csv@Anagha我刚刚编辑了我的答案,看看这个问题是否可以用最后的
grep
解决。对不起,没有。我需要先计算出列名,然后再计算出索引。正如我前面提到的,我的实际数据集由大约100列组成,其中很少有列具有alpha值。因此,我需要首先得到它,我需要首先计算出列名,然后是索引。正如我前面提到的,我的实际数据集由大约100列组成,其中很少有列具有alpha值。因此我需要先得到它
df = read.csv('file.csv',header=T,stringsAsFactors=FALSE,na.strings=c("NA"))
type = sapply(df,class) 
indexes = which(type=='character')
nameofindexes = names(indexes)