我有一个数据集,其中包含世界各地发生的事件的信息。我的目的是将这些数据汇总到国家/地区的年度水平。但在此之前,我想创建一个变量“capital.city”,表明事件是否发生在首都城市。
到目前为止,我所做的-咨询AI Bing -是这样的:
library(countrycode)
library(maps)
# Load the world cities dataset
data("world.cities")
# Create a list of capital cities
capital_cities <- unique(world.cities$capital)
# Create a new variable indicating whether a city is a capital or not
dt_protest$capital_city <- ifelse(dt_protest$city %in% capital_cities, "capital", "non-capital")
但这实际上并不起作用-我只得到非资本值。我做错了什么?
以下是我的数据样本:
date month year city country
4/4/2006 4 2006 Lyon France
5/23/2021 5 2021 Abeokuta Nigeria
3/19/1996 3 1996 Kuala Lumpur Malaysia
11/30/2006 11 2006 Moscow Russia
11/30/2011 11 2011 Tinsukia India
1/4/2014 1 2014 Saharsa India
11/23/2016 11 2016 Venezuela Cuba
9/27/2019 9 2019 Shanghai China
5/22/2003 5 2003 Bonn Germany
12/7/2006 12 2006 Thetford United Kingdom
9/10/2010 9 2010 New Delhi India
11/17/2020 11 2020 Helsinki Finland
1/22/2011 1 2011 Berlin Germany
3/19/1993 3 1993 Jerusalem Israel
8/2/2004 8 2004 Mumbai India
12/9/2000 12 2000 Mumbai India
8/29/2001 8 2001 Guelph Canada
4/7/2003 4 2003 Seoul South Korea
9/11/2003 9 2003 Brussels Belgium
4/5/2006 4 2006 Hong Kong China
2/1/2007 2 2007 Kathmandu Nepal
10/4/2007 10 2007 Moscow Russia
9/3/2008 9 2008 Luanda Angola
10/21/2009 10 2009 JohannesburgSouth Africa
2/20/2010 2 2010 TashkentUzbekistan
7/20/2010 7 2010 Singur India
10/24/2011 10 2011 SrinagarIndia
11/14/2012 11 2012 Delhi India
1/2/2015 1 2015 Cairo Egypt
10/13/2015 10 2015 TinsukiaIndia
1条答案
按热度按时间ozxc1zmp1#
Bing的人工智能建议
capital_cities <- unique(world.cities$capital)
并没有创建一个首都城市的列表(惊喜,人工智能让你误入歧途!)-它创建了一个长度为4的整数向量(c(0, 1, 3, 2)
),这是该列的唯一值,并且不采用任何城市名称。您将获得所有非大写值,因为city值永远不会采用0、1、2或3的值,因此默认为
ifelse
的“else”方面,即“not capital”。如果只是使用城市作为指标,你应该这样做:
然后你可以使用ab
ifelse
语句来创建新的变量:但是,如果两个国家都有一个城市,其中一个是首都,另一个不是首都,这可能会导致问题。法国巴黎和美国印第安纳州州巴黎是非常不同的地方。一个“更安全”的方法可能是在城市和国家都使用
merge
:在这些数据中,输出都是:
请注意,
world.cities
数据集表示中国的其他行政首都为2(直辖市)或3(省会)-请参见?world.cities
。如果您不想包括这些,请更改为unique(world.cities[world.cities$capital == 1, "name"])
。