1

我有一个包含 23 个元素的列表,每个元素有 69 行和 13 列。而且我需要为列表的每个元素在多列上应用计算。

作为一个简单的示例,我的列表如下所示:

>list
>$`1` 
>       a       b     c 
>1    2.1    1.4    3.4 
>2    4.4    2.6    5.5 
>3    2.6    0.4    3.0 
... 

>$`2` 
>      a       b        c 
>70    5.1    4.9    5.1 
>71    4.4    7.6    8.5 
>72    2.8    3.5    6.8 
... 

我想要做的是z = (a-b) / c 每个元素($ 1,$ 2..., $ 23

我尝试了以下代码:

for( i in 1:23) {
z = (list[[i]]$a - list[[i]]$b) / list[[i]]$c }

它只给了我 49 个值,而不是 1566 个值。

任何人都知道我的代码有什么问题并能够纠正它吗?非常感谢!

4

2 回答 2

2

你可以用函数来做到这一点lapply()。这是假设在所有数据框中列具有相同名称的示例。

ll<-list(data.frame(a=1:3,b=4:6,c=7:9),
         data.frame(a=1:3,b=6:4,c=7:9),
         data.frame(a=1:3,b=4:6,c=9:7))

lapply(ll, with, (a-b)/c)
于 2013-08-26T10:40:41.783 回答
0

处理@DidzisElferts 答案,您可以使用它

lapply(ll, within, z <- (a-b)/c)

在每个数据框上添加z为新列。

于 2013-08-26T12:46:02.587 回答