ddply(和类似函数)如何处理多个数据帧。
例如,我有一个数据框,其中包含有关家庭中汽车的信息
car <- data.frame(name=c('aaa','aaa','bbb'), cars=c('honda','chevy','datsun'))
和第二个包含家庭成员的数据框
people <- data.frame(name=c('aaa','bbb','bbb'), age=c(25,18,33))
我想申请一个功能
neatfun <- function( car_chunk, people_chunk){ analysis with age and type of cars}
到相应的汽车和人群,
analysis <- ddply( list(car,people), "name", neatfun)
其中ddply会按名称拆分数据帧列表,然后将每个数据帧的相应块传递给neatfun函数。
目前,我愿意假设每个“名字”出现在所有数据框中,所以我不必担心有汽车(但没有人)或有人(但没有汽车)的家庭。
由于
答案 0 :(得分:0)
在不知道“某些分析”的确切含义的情况下,我可以看到一些方法可以继续。首先将数据合并到一个数据帧中。
library(dplyr)
> df <- left_join(car, people)
Joining by: "name"
> df
name cars age
1 aaa honda 25
2 aaa chevy 25
3 bbb datsun 18
4 bbb datsun 33
然后使用dplyr操作进行分析。
processed_df <- df %>%
group_by(name) %>%
## do analysis here
## e.g. summarise, mutate, filter, top_n
如果你有一些更复杂的事情要做,并且你想拥有一个函数来说明数据帧,对它做一些事情,并吐出一个新的数据帧,你可以编写执行它的函数,将您的数据拆分成一个列表,将该函数应用于每个部分,然后将其保存在列表中,或者是否有意义将它们绑定在一起。
这假设我们从上面得到了相同的df,一个连接的数据帧。 (上面列出的merge
选项应与left_join
中的dplyr
完全相同。
df_func <- function(df){ ## take in a dataframe, do stuff, return a dataframe
## some analysis
return(df_new)
}
df_list <- split(df, df$name) ## make a list of dataframes,
## where each element is a dataframe with the same name
df_new_list <- lapply(df_list, FUN = df_func) ## apply function to each element
total_list <- rbind_all(df_new_list) ## put all the elements into a single dataframe
## rbind_all is a dplyr tool.
## otherwise you can use
total_list <- do.call(rbind, df_new_list)