3

我有一个包含 data.frames 的巨大列表(列数相同,行数不同)。我成功地使用 apply - 而不是我学会避免的 for 循环 - 在每个列表元素中的特定列上创建一个平均值

t2<-lapply(t1, function(x) cbind(x,rowMeans(x[,c("ColumnX","ColumnY","ColumnZ")])))

我现在遇到的问题是新的列名。它是“rowMeans(x[,c("ColumnX","ColumnY","ColumnZ")])"。

如何为所有列表元素更改此设置?我可怜的“lapply”知识不足以完成这项任务。

4

2 回答 2

4

有两种方法可以做到这一点,它实际上与cbind函数而不是lapply函数有关:

cbind(x,DesiredName = rowMeans(x[,...]))

或者在你绑定之后:

> names(x)
[1] "Column X" "Column Y" "Column Z" "rowMeans(x[,...])"
> names(x)[4]
"rowMeans(x[,...])"
> names(x)[4] <- "DesiredName" ###Assign a name to the fourth column
> names(x)
[1] "Column X" "Column Y" "Column Z" "DesiredName"

这显然是很长的路要走,但如果您在applyorcbind过程中忘记命名某些东西,它很有用。

于 2012-10-29T17:19:16.927 回答
1

只需添加一个 colname,例如RowMeans

t2 <-lapply(t1, function(x) cbind(x,RowMeans=rowMeans(x[,c("ColumnX","ColumnY","ColumnZ")])))

实际上,您可以使用此替代方法来实现您的目标:

lapply(t1, function(x) transform(x,RowMeans=rowMeans(x[,c("ColumnX","ColumnY","ColumnZ")])))

RowMeans是包含每行平均值的新变量的名称。

于 2012-10-29T17:16:02.497 回答