您好我有以下数据框。由于该列包含NA,因此该列的数据类型为character
。现在,我需要获取仅包含String值的列名和索引。
在下面的示例中,我想获取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' s
a <- which(colnames(df)=="Zo-A" )
integer(0)
match_col <- match(c("Zo-A","Zo-B")names(df))
NA NA
我需要执行以下操作:
column names
由String
值column index
ionic address
相同的答案 0 :(得分:2)
要获得此功能,我们可以使用以下代码:
K=sapply(df,function(x)any(grepl("\\D+",x)))
names (df)[K]
Zo.A Zo.B
Which (k)
Zo.A Zo.B
2 4
答案 1 :(得分:1)
对于我对你的问题的理解,你想要或需要的是真的,非常简单。
首先,阅读。中的数据。
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>
现在,问题(1),&#34;首先得到包含字符串值&#34;的列名。所有列名都包含字符串值,因此可以使用names
或colnames
来完成。
names(df)
[1] "ZONE-1" "Zo-A" "Zone-3" "Zo-B"
colnames(df)
[1] "ZONE-1" "Zo-A" "Zone-3" "Zo-B"
现在问题(2),得到&#34;和#34;的列索引。 (我假设你要求的是Zo-A
栏。)
a <- which(colnames(df) == "Zo-A")
a
[1] 2
a2 <- grep("Zo-A", colnames(df))
a2
[1] 2
dput格式的数据。
df <-
structure(list(`ZONE-1` = c(58L, 60L, NA, 70L), `Zo-A` = structure(c(2L,
NA, 1L, 2L), .Label = c("Off", "On"), class = "factor"), `Zone-3` = c(75L,
NA, 68L, NA), `Zo-B` = structure(c(NA, 1L, 2L, NA), .Label = c("High",
"Low"), class = "factor")), .Names = c("ZONE-1", "Zo-A", "Zone-3",
"Zo-B"), class = "data.frame", row.names = c(NA, -4L))
修改强>
如果只需要获取由字母字符和标点符号组成的列名,则可以使用以下正则表达式。
a3 <- grep("^[[:alpha:]|[:punct:]]*$", colnames(df))
a3
[1] 2 4
答案 2 :(得分:0)
在读取data.frame时,您可以指定'stringsAsFactors = FALSE',如果您的数据本身包含NA作为字符串“NA”,那么您可以在read.csv设置中指定此参数na.strings = c(“ NA“)
df = read.csv('file.csv',header=T,stringsAsFactors=FALSE,na.strings=c("NA"))
然后尝试:
type = sapply(df,class)
indexes = which(type=='character')
nameofindexes = names(indexes)