1

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

这是我的数据集的屏幕截图:http://i.imgur.com/e3s3XVn.png

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

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

感谢您的任何建议。

4

2 回答 2

7

这是非常基本的子集,您可以在 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"))
于 2013-03-11T17:09:13.527 回答
2

尝试使用subset函数

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

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

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

> 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

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

于 2013-03-11T17:10:13.150 回答