【问题标题】:Extracting specific countries in Panel Data提取面板数据中的特定国家
【发布时间】:2013-03-11 17:07:02
【问题描述】:

我有一个 .csv 文件中包含 180 个国家/地区的面板数据,我想创建 180 个国家/地区的一个子集,以基于该子集运行回归。

这是我的数据集的截图:

我一直在玩弄子集函数,但我似乎无法让它正常工作。

最终,我应该如何创建一个仅包含例如“Albania”、“United States”的子集,同时保持其他列相同。

感谢您的任何建议。

【问题讨论】:

    标签: r panel extract


    【解决方案1】:

    这是非常基本的子集,您可以在 SO 和任何介绍性手册中找到几个答案。

    假设您已将 csv 文件作为名为“df”的对象读取,这样的事情应该可以完成:

    df[df$country %in% c("United States", "Albania"), ]
    

    未来:

    1. 您的数据的屏幕截图几乎没有用处。请改用dput(head(yourdata)) 之类的内容。
    2. 显示您尝试过的内容。不要简单地写“我一直在玩弄子集函数”。如果您特别想使用 subset 功能但没有成功,展示您为帮助他人解决问题所做的工作会很有帮助。

    一个最小的例子

    样本数据:

    set.seed(1)
    df <- data.frame(country = sample(letters[1:5], 15, replace = TRUE),
                     somerandomvalue = rnorm(15),
                     anotherrandomvalue = rnorm(15))
    

    关于“国家”列的一些摘要数据。向我们展示了五个独特的国家/地区,总共有 15 个案例(行)。

    > summary(df$country)
    a b c d e 
    2 5 1 4 3 
    

    只取一个子集:

    > df[df$country %in% c("a", "b"), ]
       country somerandomvalue anotherrandomvalue
    1        b    -0.005767173         0.80418951
    2        b     2.404653389        -0.05710677
    5        b    -1.147657009        -0.69095384
    10       a    -0.891921127        -0.43331032
    11       b     0.435683299        -0.64947165
    12       a    -1.237538422         0.72675075
    14       b     0.377395646         0.99216037
    

    或者,使用子集函数:

    subset(df, country %in% c("a", "b"))
    

    【讨论】:

    • 一个更相关的问题,假设我使用子集函数选择了我想要的国家。如何将我遗漏的其他人分组到另一个 data.frame 中?
    • @SamChu,感叹号是“不是”,所以你可以做类似countriesIWant &lt;- df[df$country %in% c("a", "b"), ]; allTheOtherCountries &lt;- df[!df$country %in% c("a", "b"), ]的事情。注意那里的!。试试我在回答中提供的示例数据,看看它是如何工作的。
    【解决方案2】:

    尝试使用subset函数

       subset(YourData, country=c('Albania', 'United States'))
    

    有关详细信息,请参阅?subset

    一个例子:(感谢@Roman Luštrik 和 Ananda 的 cmets 编辑)

    > Data <- data.frame(Country=rep(letters[1:6], each=3), random=rnorm(18))
        > subset(Data, Country %in% c('a','b'))
      Country      random
    1       a -1.02159357
    2       a -0.88256998
    3       a -0.24138579
    4       b  0.35844584
    5       b  0.05288194
    6       b -1.09724481
    > subset(Data, Country == "a" | Country == "b")
      Country      random
    1       a -1.02159357
    2       a -0.88256998
    3       a -0.24138579
    4       b  0.35844584
    5       b  0.05288194
    6       b -1.09724481
    

    Here 您将学习如何制作一个很好的可重现示例来说明您的问题。

    【讨论】:

    • 谢谢,我很抱歉没有使这个易于阅读/理解。
    • 如果你想摆脱这样的子集,你应该做subset(Data, Country == "a" | Country == "b")。您当前的设置提供了一些时髦的回收(向 Ananda 致敬)。
    • @AnandaMahto 和 Roman Luštrik 感谢 cmets 我错了,我刚刚更新了我的答案 ;)
    猜你喜欢
    • 2013-03-13
    • 2022-01-26
    • 2020-02-29
    • 1970-01-01
    • 2021-12-26
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多