[英]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.