【问题标题】:How do you output results of a loop applied to a data frame into a new data frame? [duplicate]如何将应用于数据帧的循环结果输出到新数据帧中? [复制]
【发布时间】:2021-10-30 19:10:08
【问题描述】:

我正在处理一个包含以下列的数据框 - 国家、因素、年份、技术人员数量。

我想要实现的目标:创建一个新的数据框,其中仅包含每个国家/地区的最新数据(即最高年份)(注意:每个国家/地区都有几行数据)。

我创建了一个函数来隔离国家和年份,如下所示。 (注意:主数据集 = 数字)

#Function to isolate 1 country
one_country1 <- function(x) {
        a <- numeric %>% filter(Factor == x)
        return(a) }

#Function to isolate latest year 
latest_country <- function(y){
        b <- y %>% filter(Year == max(Year))
        return(b) }

#Function to isolate both country and latest year 
best_data <- function(z){
        G <- latest_country(one_country1(z))
        return(G)}

然后我将其制成一个 for 循环,以将其应用于每个国家/地区,如下所示。

z <- 1
loop_data <- for(z in 1:114){
        print(best_data(z))}

这会产生正确的数据,但它是一种奇怪的格式,不是数据框。当我尝试“typeof”时,它显示“NULL”,我似乎无法使用简单的 as.data.frame 函数或从空数据框开始并将 rbind.data.frame 合并到函数中将其转换为数据框。结果显示如下:

Country Factor Year Technicians
1   Yemen    112 2010        1809
  Country Factor Year Technicians
1  Zambia    113 2012        1126
   Country Factor Year Technicians
1 Zimbabwe    114 2018        1126

typeof(loop_data) = NULL

任何有关如何修改此代码以输出数据框的帮助将不胜感激!我几周前才开始学习 R,所以请原谅代码可能是多么业余和不整洁!

【问题讨论】:

  • result &lt;- df %&gt;% group_by(Country) %&gt;% filter(Year == max(Year)) ?

标签: r dataframe for-loop


【解决方案1】:
Country = df$Country

for (country in Country) {
loop_data <- df%>%
group_by(Country)
filter(Year == max(Year)) 
}

你也可以试试

for (country in Country) {
    loop_data <- df%>%
    filter(Country == country)%>%
    filter(Year == max(Year)) 
    }

for (country in Country) {
    loop_data <- df%>%
    filter(Country == country)%>%
    slice(which.max(Year)) 
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 2013-03-07
    • 1970-01-01
    • 2020-06-09
    • 2020-11-21
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多