【问题标题】:how to add id variable to multiple datasets in R如何将id变量添加到R中的多个数据集
【发布时间】:2013-06-13 05:37:33
【问题描述】:

使用 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 建议的here,他指出:i 是字符串;您想要具有在 i 中保存的名称的对象。那就是get()函数。

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

感谢任何cmets,

理查德

【问题讨论】:

    标签: r variables loops dataset


    【解决方案1】:
    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
    })
    

    【讨论】:

    • +1 太快了!这是我的确切答案,包括使用listlapply
    • 非常感谢您提供这两个解决方案。他们俩都像魅力一样工作。我认识到在 R 中 lapply 解决方案优于“循环解决方案”,但我发现当它们以列表格式放入时很难处理数据集。 (例如,对其中一个进行分析,或者以 .txt 格式编写它们。)我想我必须提高我的 lapply 技能! ;) 再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2020-12-10
    • 2021-05-21
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    相关资源
    最近更新 更多