创建通过将函数应用于原始数据框的子集而生成的数据框列表

时间:2017-11-10 20:38:11

标签: r

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

以下是一些示例数据:

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)

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

2 个答案:

答案 0 :(得分:2)

选项可以是

library(dplyr)

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

然后你可以得到清单

Countries <- result_by_country$outcome_table

答案 1 :(得分:0)

虽然看起来dplyr软件包在这种情况下看起来非常有用,但是missuse让我想到了通过使用“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)))

感谢大家的投入!