我有一个包含data.frames的大型列表(相同的列数,不同的行数)。 我成功地使用apply - 而不是我学会避免的for循环 - 使用
创建每个列表元素中特定列的平均值t2<-lapply(t1, function(x) cbind(x,rowMeans(x[,c("ColumnX","ColumnY","ColumnZ")])))
我现在遇到的问题是新列名称。它是“rowMeans(x [,c(”ColumnX“,”ColumnY“,”ColumnZ“)])”。
如何为所有列表元素更改此设置?我糟糕的“lapply”知识还不足以完成这项任务。
答案 0 :(得分: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"
这显然是漫长的道路,但如果您忘记在apply
或cbind
流程中输入内容,则会很有用。
答案 1 :(得分: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
是包含每行均值的新变量的名称。