如果我有一个数据框或数据框列表,我正在应用一个函数,如:
df1
start stop ID
0 10 x
10 20 y
20 30 z
df2
start stop ID
0 10 a
10 20 b
20 30 c
让我说我使用的功能:
mylist=list(df1,df2)
mylist <- lapply(mylist, function(x) {x$Avg<-(((x[,1]+x[,2]))/2) ; return(x)})
这给了我输出:
df1
start stop ID Avg
0 10 x 5
10 20 y 15
20 30 z 25
df2
start stop ID Avg
0 10 a 5
10 20 b 15
20 30 c 25
但是我想让它显示下面行的平均值,以便输出就是这个(我不关心不可计算行中的内容):
df1
start stop ID Avg
0 10 x 15
10 20 y 25
20 30 z NA
df2
start stop ID Avg
0 10 a 15
10 20 b 25
20 30 c NA
我该怎么做?而且它需要处于lapply状态,因为我将对数十个数据帧进行处理。感谢
答案 0 :(得分:1)
您可以从输出中删除第一个元素([-1]
)并与NA连接。如果您有NA值,在前两列上执行rowMeans
可能很有用,因为它可以选择删除NA值(na.rm=TRUE
)。
lapply(mylist, function(x) { x$Avg <-c(rowMeans(x[-3])[-1],NA)
x})
#[[1]]
# start stop ID Avg
#1 0 10 x 15
#2 10 20 y 25
#3 20 30 z NA
#[[2]]
# start stop ID Avg
#1 0 10 a 15
#2 10 20 b 25
#3 20 30 c NA