我是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
}
我现在有两个问题。
当我print(lights.logsvarlist1[1,]
时,名字似乎没有改变。我仍然将旧的变量名称作为标题。
当我print(names(lights))
时,我新创建的变量似乎不属于数据集(它们不在列表中)。
我做错了什么?我对R很新,我真的想继续,我很感激任何帮助。
答案 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