3

使用 R,我想向多个数据集添加一个计数器变量(id 变量)。例如,我有两个数据集 x.df 和 y.df:

x1   <- c(1,3,5,7)
x2   <- letters[1:4]
x.df <- as.data.frame(cbind(x1, x2))

y1   <- c(100,200,300,400,500)
y2   <- c(letters[22:26])
y.df <- as.data.frame(cbind(y1, y2))

对于这些数据集,我想添加一个 id 变量“id”:

datasets <- c("x.df","y.df")

for (i in datasets) {
  i$sortid <- c(1:nrow(i))
}

这会导致错误:

1:nrow(i) 中的错误:长度为 0 的参数

我认为导致错误的原因是Brian Diggs在这里提出的,他指出: i 是一个字符串;您想要具有在 i 中保存的名称的对象。那就是 get() 函数。

但是,我不确定如何将 get 函数应用于“数据集”的元素。另外我认为 lapply 在这里不合适,因为我想添加一个变量而不是输出列表,但也许我错了?

任何意见表示赞赏,

理查德

4

1 回答 1

8
for (i in datasets)
{
    d <- get(i)
    d$sortid <- 1:nrow(d)
    assign(i, d)
}

但真正的答案是将您的数据集包装在一个列表中:

dfs <- lapply(list(x.df, y.df), function(d) {
     d$sortid <- 1:nrow(d)
     d
})
于 2013-06-17T09:53:41.167 回答