【发布时间】: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),其中功能可以扩展到任何与子集交互的东西。你避免使用split和lapply。 -
感谢您的输入,误用。我最终使用 split 函数来获得我正在寻找的输出。
标签: r