我有很多(空间)数据框架的列表。我想为每个data.frame添加一列,其ID等于列表索引ID(即每个data.frame的新列中的每一行都具有相同的ID)。
我认为我必须与cbind一起使用一些apply函数,但是我不知道如何为列表中的每个元素(尤其是Spatial data.frames元素)设置其格式。请帮忙!
以下是一些可使用的示例代码:
d1 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6))
d2 <- data.frame(y1 = c(3, 2, 1), y2 = c(6, 5, 4))
my.list <- list(d1, d2)
我想结束以下内容:
[[1]]
y1 y2 unique.id
1 1 4 1
2 2 5 1
3 3 6 1
[[2]]
y1 y2 unique.id
1 3 6 2
2 2 5 2
3 1 4 2
答案 0 :(得分:3)
尝试:
newlist <- Map(cbind,my.list, unique.id = (1:length(my.list)))
答案 1 :(得分:1)
您可以使用let query = `SELECT dept_id, dept_name, over_head_costs, product_sales) AS product_sales, product_sales - over_head_costs AS profit FROM departments`;
connection.query(query, (err, res) => {
if (err) throw err;
console.log(res);
。
replace
或更短
lapply(seq_along(my.list),
function(x) setNames(replace(my.list[[x]], ncol(my.list[[x]]) + 1, x),
c(names(my.list[[x]]), "unique.id")))
# [[1]]
# y1 y2 unique.id
# 1 1 4 1
# 2 2 5 1
# 3 3 6 1
#
# [[2]]
# y1 y2 unique.id
# 1 3 6 2
# 2 2 5 2
# 3 1 4 2
答案 2 :(得分:1)
您可以通过mapply
-
> mapply(function(x, y) "[<-"(x, "ID", value = y) , my.list, 1:length(my.list), SIMPLIFY = FALSE)
OR
> mapply(cbind, my.list, "SampleID"=1:length(my.list), SIMPLIFY=F)
[[1]]
$`1`
y1 y2 ID
1 1 4 1
2 2 5 1
3 3 6 1
$`2`
y1 y2 ID
1 3 6 2
2 2 5 2
3 1 4 2
答案 3 :(得分:1)
这是使用for
循环的一种方式
for (i in seq_along(my.list)) {
my.list[[i]] <- data.frame(my.list[[i]], "unique.id" = i)
}
> my.list
[[1]]
y1 y2 unique.id
1 1 4 1
2 2 5 1
3 3 6 1
[[2]]
y1 y2 unique.id
1 3 6 2
2 2 5 2
3 1 4 2
答案 4 :(得分:1)
与Mike和Rushabh的相似:
mapply(FUN = function(x, y) {
x$unique.id <- y
x
}, x = my.list, y = 1:length(my.list), SIMPLIFY = FALSE)
答案 5 :(得分:0)
我们可以将列表折叠为具有 id 的单个 dataframe ,然后再次 split :
library(data.table)
x <- rbindlist(my.list, idcol = "unique.id")
# unique.id y1 y2
# 1: 1 1 4
# 2: 1 2 5
# 3: 1 3 6
# 4: 2 3 6
# 5: 2 2 5
# 6: 2 1 4
my.list <- split(x, x$unique.id)
# $`1`
# unique.id y1 y2
# 1: 1 1 4
# 2: 1 2 5
# 3: 1 3 6
#
# $`2`
# unique.id y1 y2
# 1: 2 3 6
# 2: 2 2 5
# 3: 2 1 4