使用for循环将列名从大写字母转换为小写

问题描述 投票:-1回答:3

我想使用for循环以小写形式转换列名

df <- structure(list(a = c(1, 2), b = c(2, 3)), .Names = c("a", "b"
), row.names = c(NA, -2L), class = "data.frame")

如果我使用R基本功能很容易就可以转换

colnames(df) <- toupper(colnames(df))

但是当我使用以下R代码无法完成时

for( i in colnames(df)){
    colnames(df[i]) = toupper(i)
     return()
 }

请告诉我我错在哪里,谢谢你。

r
3个回答
1
投票

df[i]是与df不同的对象。虽然colnames<-有改变物体的副作用,但你并没有给它改变df。您需要以可以修改df的方式重写,例如:

for( i in colnames(df)){
    colnames(df)[which(colnames(df)==i)] = toupper(i)
 }

df
  A B
1 1 2
2 2 3

此外,您不应该从顶层的for循环返回,这会导致错误。


1
投票

您应该可以使用for循环来完成列名称的数量:

for (i in 1:length(colnames(df))) {
    colnames(df)[i] = toupper(colnames(df)[i])
    # return()     ... you don't need this
}

Demo


1
投票

他比我快。你也可以跳过lenght(colnames(df))

for( i in 1:ncol(df)){
   colnames(df)[i] <- toupper(colnames(df)[i])
}
© www.soinside.com 2019 - 2024. All rights reserved.