【问题标题】:Create a list of dataframes that are generated by applying a function to subsets of an original dataframe创建通过将函数应用于原始数据帧的子集而生成的数据帧列表
【发布时间】:2017-11-11 06:04:02
【问题描述】:

我正在尝试创建一个数据帧列表,这些数据帧是通过将函数应用于我的原始数据帧的子集而创建的。

这是一些示例数据:

Data <- data.frame("Country" = c("UK", "UK", "US", "US", "US", "France", "France", "Japan", 
"Japan", "Japan", "India", "India"), "Outcome" = c("Y", "N", "Y", "Y", "Y", "N", "N", "Y",
"N", "Y", "N", "Y"))

我通过我的一个变量(国家)进行子集化,并应用相同的函数从每个子集创建一个新的数据框:

Data.UK <- subset(Data, Country == "UK")
UK <- as.data.frame(table(Data.UK$Outcome))
Data.US <- subset(Data, Country == "US")
US <- as.data.frame(table(Data.US$Outcome))
Data.France <- subset(Data, Country == "France")
France <- as.data.frame(table(Data.France$Outcome))
Data.Japan <- subset(Data, Country == "Japan")
Japan <- as.data.frame(table(Data.Japan$Outcome))
Data.India <- subset(Data, Country == "India")
India <- as.data.frame(table(Data.India$Outcome))

然后我将这些数据框组合成一个列表:

Countries <- list(UK, US, France, Japan, India)

我确信有一种更简单的方法可以做到这一点,特别是对于具有更多子集的更大数据集(在我的情况下,我需要按世界上每个国家/地区进行子集化),我想我可以做到这一点通过基于我要作为子集的变量的唯一值的字符向量进行子集,但我不知道该怎么做。非常感谢任何帮助!

【问题讨论】:

  • 试试:split(Data, Data$Country)
  • lapply(unique(Data$Country), function(x) as.data.frame(table(Data[Data$Country == x ,"Outcome"])))
  • 还有by(Date, Data$Country, FUN=function(df) df),其中功能可以扩展到任何与子集交互的东西。你避免使用splitlapply
  • 感谢您的输入,误用。我最终使用 split 函数来获得我正在寻找的输出。

标签: r


【解决方案1】:

一个选项可以是

library(dplyr)

result_by_country <- group_by(Data, Country) %>% 
  summarise(outcome_table = list(table(Outcome))) 

那么你就可以得到列表了

Countries <- result_by_country$outcome_table

【讨论】:

    【解决方案2】:

    虽然 dplyr 包在这种情况下看起来确实很有帮助,但 misuse 给了我使用“split”功能开始的想法,所以我最终这样做了:

    List_country <- split(Data, Data$Country)
    Countries_outcome <- lapply(List_country, function(x) x[2])
    Countries <- lapply(Countries_outcome, function(x) as.data.frame(table(x)))
    

    谢谢大家的意见!

    【讨论】:

      猜你喜欢
      • 2020-02-17
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2018-09-29
      • 1970-01-01
      • 2021-03-16
      相关资源
      最近更新 更多