如何在 R 中将函数的应用向下移动一行

How to shift the application of a function down a row in R

如果我有一个要应用函数的数据框或数据框列表,例如:

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]) 并与 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