R 如何获取列名和列索引
嗨,我有下面的数据框。由于该列包含NA,因此该列的数据类型为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
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)