使用条件替换值

时间:2019-04-10 17:14:04

标签: r

我有一组与不同研究相关的数据点(以行表示),各列包含有关国家/地区,参与者人数等的信息。

我想清理国家/地区数据,因为其中存在一些小错误,例如多余的空格,不同的拼写/缩写等。

为此,我创建了一个新变量country_mod,以便可以使用现有的国家/地区变量来保留原始数据。我检查了这个新变量中的级别,并用它编写了一些替换函数(按照下面的代码)。当我运行它们时,没有错误消息,但是再次检查级别表明没有任何变化,并且值没有被重新编码。

例如在下面的示例中,我期望将“ Australia”值替换为“ Australia”,但似乎什么也没发生。

这是一个非常基本的功能,但是我无法为自己的生活弄清楚为什么它不起作用-我真的很欢迎任何关于我要去哪里的建议。

我在网上看过一遍,找不到关于此问题的任何答案。

这是我下面的代码-数据集称为studies;原始变量称为Country;新变量称为country_mod

#Create new, modified variable for country
studies$country_mod <- studies$Country

#Check what the different levels are

levels(studies$country_mod)

 'Australia' 'Australia ' 'Belgium' 'Canada' 'Denmark' 'Estonia' 'Finland' 'France' 'Germany' 'Greece' 'Hong Kong' 'Hungary' 'Ireland' 'Israel' 'Italy' 'Japan' 'multiple' 'Netherlands' 'New Zealand' 'Norway' 'Poland' 'Portugal' 'Scotland' 'South Korea' 'Spain' 'Spain ' 'Sweden' 'Switzerland' 'Taiwan' 'UK' 'United Kingdom' 'United States' 'United States (Puerto Rico)' 'Uruguay' 'US Virgin Islands' 'USA' 'USA - Puerto Rico' 

# Duplicate values for Australia - one has a space in it. Let's recode it.

studies$country_mod[studies$country_mod=="Australia "] <- "Australia"

levels(studies$country_mod)

 'Australia' 'Australia ' 'Belgium' 'Canada' 'Denmark' 'Estonia' 'Finland' 'France' 'Germany' 'Greece' 'Hong Kong' 'Hungary' 'Ireland' 'Israel' 'Italy' 'Japan' 'multiple' 'Netherlands' 'New Zealand' 'Norway' 'Poland' 'Portugal' 'Scotland' 'South Korea' 'Spain' 'Spain ' 'Sweden' 'Switzerland' 'Taiwan' 'UK' 'United Kingdom' 'United States' 'United States (Puerto Rico)' 'Uruguay' 'US Virgin Islands' 'USA' 'USA - Puerto Rico'

1 个答案:

答案 0 :(得分:1)

TLDR,重新编码确实起作用,但是,它不会更改因子“ Country_mod”的“级别”。如果调用table(studies$Country_mod),将看到一个表,该表的名称表示Country_mod中的观察值可能取的值(因子的所有水平),该值与指示实际有多少行的数值相关联取那个值。因此,您的示例将在重新编码后在0下显示"Australia "。同样,levels(studies$Country_mod)仍将打印该因子的所有历史“级别”,而不管当前是否有任何实际观测值采用该值。如果在清理完Country_mod条目后,使用levels()函数来更改因子可以采用的水平,那么您将实现我相信的期望。记录过程的结果。