我正在尝试创建一个数据框列表,这些数据框是通过将函数应用于原始数据框的子集而创建的。
以下是一些示例数据:
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'的子集的唯一值的字符向量进行子集化,但是我不知道如何去做。非常感谢任何帮助!
答案 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)))
感谢大家的投入!