[英]Apply function to list of dataframes by row, returning a list of dataframes
這是有效的,但它似乎很笨重。 有沒有更直接的方法來做到這一點? 我有一個數據框列表,我想將 function 應用於將一些內容返回到 dataframe 的每一行。
#Some fake data
df1=data.frame(a=rnorm(100,5,1), b=rnorm(100,5,1))
df2=data.frame(c=rnorm(100,5,1), d=rnorm(100,5,1), e=rnorm(100,5,1))
mylist<-list(df1,df2)
names(mylist)<-c("df1","df2")
#a function this function will not be about sums, it is just the simplest
# function applied across rows I can come up with.
lfun<-function(x){apply(x, 1, FUN=function(y){
out<-data.frame(out0=y[1],
out1=sum(y[2:length(y)]),
out2=sum(y[2:length(y)])^2)})
}
#how it is currently being invoked and turned into df output
dfout<-lapply(mylist, lfun)
lapply(dfout, FUN=function(x){do.call("rbind", x)})
考慮rowSums
( apply
+ sum
的包裝):
lfun <- function(df) {
out <- data.frame(out0 = df[,1],
out1 = rowSums(df[2:length(df)]),
out2 = rowSums(df[2:length(df)])^2)
}
newlist <- lapply(mylist, lfun)
為避免重新計算rowSums
兩次,請考慮使用transform
:
lfun <- function(df) {
out <- transform(data.frame(out0 = df[,1],
out1 = rowSums(df[2:length(df)])),
out2 = out1^2)
}
newlist2 <- lapply(mylist, lfun)
identical(newlist1, newlist2)
# [1] TRUE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.