在具有 R 条件的列表列表中添加新行
Posted
技术标签:
【中文标题】在具有 R 条件的列表列表中添加新行【英文标题】:Add new rows in list of lists with conditions in R 【发布时间】:2022-01-14 10:41:58 【问题描述】:我有一个列表列表 testFrame
,看起来像:
d1 <- data.frame(var1 = c(10, 7), var2 = c(20,2), var3 = c(30,1))
d2 <- data.frame(var1 = c(20,1), var2 = c(30,2), var3 = c(40,3))
testFrame <- list(d1, d2)
[[1]]
var1 var2 var3
1 10 20 30
2 7 2 1
[[2]]
var1 var2 var3
1 20 30 40
2 1 2 3
我想在每个列表中添加两个新行,如果它是列表中的第一列,则第 3 行将是第 1 行和第 2 行之间的最大值,第 4 行是最小值。否则,第三行将是上一列第四行的数字,第四行是该数字减去该列的最小数字。
结果应该是这样的:
[[1]]
var1 var2 var3
1 10 20 30
2 7 2 1
3 10 7 5
4 7 5 4
[[2]]
var1 var2 var3
1 20 30 40
2 1 2 3
3 20 1 -1
4 1 -1 -4
到目前为止,我已经
addRows<- lapply (testFrame,
function(x)
for(i in 1:3)
if (i==1) rbind.......
else
rbind(.........)
)
我不知道要在 rbind 中放入什么。
【问题讨论】:
您能否提供您的清单,以便我以它们为例? 使用dput(x)
提供您的数据
【参考方案1】:
my_df <- data.frame("var1" = c(10, 7),
"var2" = c(20, 2),
"var3" = c(30, 1),
"var4" = c(40, 7),
stringsAsFactors = FALSE)
my_df2 <- data.frame("var1" = c(10, 18),
"var2" = c(20, 2),
"var3" = c(30, 1),
"var4" = c(40, 7),
stringsAsFactors = FALSE)
my_df3 <- data.frame("var1" = c(10, 20),
"var2" = c(20, 2),
"var3" = c(30, 1),
"var4" = c(40, 7),
stringsAsFactors = FALSE)
my_list <- list(my_df, my_df2, my_df3)
my_third <- function(x, y)
if (x == 1)
my_result <- max(my_list[[y]]$var1)
else if (x == 2)
my_result <- my_list[[y]][2, 1]
else
my_result <- my_list[[y]][2, x - 2] - my_list[[y]][2, x - 1]
return (my_result)
my_fourth <- function(x, y)
if (x == 1)
my_result <- min(my_list[[y]]$var1)
else
my_result <- my_list[[y]][3, x] - my_list[[y]][2, x]
return (my_result)
my_f <- function(y)
my_a <- lapply(1:ncol(my_list[[y]]), function(x) my_third(x, y))
my_list[[y]] <<- rbind(my_list[[y]], my_a)
my_a <- lapply(1:ncol(my_list[[y]]), function(x) my_fourth(x, y))
my_list[[y]] <<- rbind(my_list[[y]], my_a)
my_list2 <- lapply(1:length(my_list), my_f)
my_list2[[1]]
my_list2[[2]]
my_list2[[3]]
编辑:更改代码以便它可以处理数据框列表
【讨论】:
如果有多个列,这将如何工作?这就是我放置 for 循环的原因,所以我不需要硬编码数字。 嗯,这取决于你的期望,如果你有 4 列,它应该如何工作,如果你告诉我模式是什么,那么我将能够概括它 如果你看一下我上面得到的矩阵,我已经展示了模式。我也写出来了 如何对数据框列表执行此计算?以上是关于在具有 R 条件的列表列表中添加新行的主要内容,如果未能解决你的问题,请参考以下文章