如何在R中更改多个变量名?

时间:2014-04-08 15:24:27

标签: r loops rename apply names

我是R的新手

我正在尝试使用包含其他一些变量日志的变量创建变量列表。我设法创建了列表,但我不知道如何重命名每个变量。此外,我不知道如何使这些变量成为我的数据集的一部分。这是我的工作:

想象一下,somedata是一个csv文件:

v1,  v2,  v3, ...,  vn
1, 4, 6,    ...,  1
...

然后这是我的剧本

##################
## Import Data
###################
lights <- read.csv("somedata.csv")  

##################
## Variable Lists
###################
 lights.varlist1 <- subset(lights, select=c(v1,v2,...,vJ))

 ###########
 ## Logs
 ###########

 lights.logsvarlist1=apply(lights.varlist1, 2, function(y) log(y))

这部分似乎工作得很好,因为print(lights.logsvarlist1)[1,]的结果有意义

要更改我所做变量的名称:

for (i in 1:length(lights.logsvarlist1[1,]) {
    name <-paste("l", names(lights.varlist1)[i], separator="")
    names(lights.logsvarlist1)[i]=name
}

我现在有两个问题。

  1. 当我print(lights.logsvarlist1[1,]时,名字似乎没有改变。我仍然将旧的变量名称作为标题。

  2. 当我print(names(lights))时,我新创建的变量似乎不属于数据集(它们不在列表中)。

  3. 我做错了什么?我对R很新,我真的想继续,我很感激任何帮助。

2 个答案:

答案 0 :(得分:1)

这适用于我并避免for循环

data = as.data.frame(matrix(abs(rnorm(100)), 10))
ldata = log(data)
names(ldata) = paste('log', names(ldata), sep = '')

其他一些提示

apply(lights.varlist1, 2, function(y) log(y))

可以替换为

apply(lights.varlist1, 2, log)

由于日志是一个功能或只是

log(lights.varlist1)

而不是以下

for (i in 1:length(lights.logsvarlist1[1,])

使用

ncol(lights.logsvarlist1)

您的新变量不在灯光数据框中。它们位于名为

的数据框中
lights.logsvarlist1

要将它们放在数据框中,请使用merge或cbind。输入?merge etc

答案 1 :(得分:1)

DF <- data.frame(a=1:3, v1=4:6, v2=7:9, v3=10:12)

sub <- c("v1", "v2", "v3")
DF[, paste0("l", sub)] <- lapply(DF[, sub], log)

#   a v1 v2 v3      lv1      lv2      lv3
# 1 1  4  7 10 1.386294 1.945910 2.302585
# 2 2  5  8 11 1.609438 2.079442 2.397895
# 3 3  6  9 12 1.791759 2.197225 2.484907