gpt4 book ai didi

r 中的 rev() 以及如何使用循环将其应用于列表

转载 作者:行者123 更新时间:2023-12-04 10:56:16 28 4
gpt4 key购买 nike

我有一个 say {a,b,c,d,...} 的列表,每个元素 a,b,c,d, ... 是 data.table但是,对于 data.table,我需要颠倒顺序我只想rev()除了第一列之外的所有内容,因为它是 ID .我尝试使用循环来做到这一点,但它返回

Error in `[<-.data.table`(`*tmp*`, , -1, value = list(code_a = c("a",  : 
Item 1 of column numbers in j is -1 which is outside range [1,ncol=4]. Use column names instead in j to add new columns.

例子:
a <- c("a","b","c","d","e","f")
b <- 1:6
c <- c("F","E","D","C","B","A")
d <- 10:15
dt1 <- data.table("ID" = b, "code_a" = a)
dt2 <- data.table("ID" = b, "code_c" = c)
dt3 <- data.table("ID" = b, "code_d" = d)
dt <- list(dt1,dt2,dt3)
rev_dt <- rev(dt)
merged_list <- list()
rev_merged_list <- list()
rev_merged_list <- Reduce(merge, rev_dt, accumulate = TRUE)
merged_list <- rev_merged_list
merged_list <- rev(merged_list)

for(z in 1:length(dt)){
merged_list[[z]][,-1] = rev(merged_list[[z]][,-1])
}

更多信息:

这里的for循环应该是:
- 对于 z从 1 到 dt 的长度
- merged_list元素 z(带双方括号)应该是 data.table- 数据不包括第一列
- 应该分配给相同元素 z 的 rev,其中第一列也被排除在外

这个逻辑是否适用于上述循环?我不确定出了什么问题!

预期输出:
output_ <- list()
a_ <- data.table("ID" = b, "code_a" = a, "code_c" = c, "code_d" = d)
b_ <- data.table("ID" = b, "code_c" = c, "code_d" = d)
c_ <- data.table("ID" = b, "code_d" = d)
output_[[1]] <- a_
output_[[2]] <- b_
output_[[3]] <- c_
output_

昨天有人告诉我,上面的合并我可以指定右手合并,但是这样做时,我需要指定一个 by = "ID"在合并中,但我不确定什么是 xy合并多组数据时的值。

我的印象也是 lapply()可以做同样的事情而不是循环,但我不确定在这种情况下我如何做到这一点。谢谢~

最佳答案

我们可以使用 setcolorder

for(i in seq_along(merged_list)){
setcolorder(merged_list[[i]],
c(names(merged_list[[i]])[1], rev(names(merged_list[[i]])[-1])))
}

all.equal(merged_list, output_, check.attributes = FALSE)
#[1] TRUE

关于r 中的 rev() 以及如何使用循环将其应用于列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59166122/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com