繁体   English   中英

遍历变量以融化R

[英]Loop through variables to melt in R

我当前的数据集有很多变量,每个变量看起来像

year    place1    place2
1999    1.1       7.8
...

我希望每个变量都能按年融化。 我不知道为什么以下代码无法正常工作。

# define function 
my.melt <- function(x){
  x <- melt(x, id.vars=c('year'), 
  variable.name='place')
}

然后,使用函数循环遍历变量:

# loop through
var.names=list(var1, var2)
for (i in 1:length(var.names)){
var.names[i] <- my.melt(var.names[i])
}

使用此循环,什么都不会改变。 但是,当我尝试

var1 <- my.melt(var1) 

它可以工作,并且我的var1重塑了。 所以我认为我的功能还可以。 为什么循环不起作用?

注意:我也尝试过lapply ; 它也没有按我预期的那样工作。

非常感谢。

循环中要更改的一件事是[ [[并且my.melt应该返回'x'

my.melt <- function(x){
  x <- melt(x, id.vars=c('year'), 
  variable.name='place')
  x
}

var.names=list(var1, var2)
for (i in 1:length(var.names)){
  var.names[[i]] <- my.melt(var.names[[i]]) 
 }

但是,这也可以通过lapply完成

 list2env(setNames(lapply(var.names, my.melt), paste0("var", 1:2)), envir = .GlobalEnv)

数据

var1 <- structure(list(year = 1999:2000, place1 = c(1.1, 1.5), place2 = c(7.8, 
  7.3)), .Names = c("year", "place1", "place2"), class = "data.frame",
  row.names = c(NA, -2L))

var2 <- structure(list(year = 1999:2000, place1 = c(1.1, 1.7), place2 = c(8.3, 
 7.3)), .Names = c("year", "place1", "place2"),
  row.names = c(NA, -2L), class = "data.frame")

关于我的最新评论,

# loop through
reshape <- lapply(var.names, my.melt)

现在,我cbind()所有数据cbind()

datalist = list() # create empty list
for (i in 1:100) {
  datalist[[i]] <- reshape[[i]]
}
merge <- do.call(cbind, datalist)
merge <- subset(merge, select = c(seq(3, 300, by = 3)))
names(merge) <- c(var.names)

绝对不是最聪明的方法-但却行得通。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM