如何在R

时间:2015-08-01 20:33:42

标签: r dataframe lapply

如果我有一个数据框或数据框列表,我正在应用一个函数,如:

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状态,因为我将对数十个数据帧进行处理。感谢

1 个答案:

答案 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