替换因子级别中的元素

时间:2017-09-02 20:52:36

标签: r

问题相当简单。出于某种原因,我想不出一个简单的解决方案,我不能在网上找到一个。我们假设这是我的数据,其中变量是一个因素:

Time
8:10
8:15
8:30
8:45
10:10
10:15
10:45

我想将所有级别转换为10到8,结果如下:

Time
8:10
8:15
8:30
8:45
8:10
8:15
8:45

我该怎么做?

1 个答案:

答案 0 :(得分:1)

正如@Rui Barradas建议的那样,你可以这样做:

Time <- as.factor(c(
"8:10",
"8:15",
"8:30",
"8:45",
"10:10",
"10:15",
"10:45"
))

factor(sub("^10", "8", Time))
[1] 8:10 8:15 8:30 8:45 8:10 8:15 8:45
Levels: 8:10 8:15 8:30 8:45

回答你的问题:&#34;我应该添加:来代替小时而不是分钟,对吗?&#34; - 不,你不需要这样做。 &#39; ^&#39;在sub参数中意味着在正则表达式中启动字符串。所以这只会选择几小时。

如果我们需要针对大型数据集进行扩展,我们可以从@lmo获取建议并采取更直接的方法;见:

levels(Time) <- sub("^10", "8", Time)

时间比较:

require(microbenchmark)
microbenchmark(factor(sub("^10", "8", Time)),
               levels(Time) <- sub("^10", "8", Time))

Unit: microseconds
                                 expr    min      lq     mean  median
        factor(sub("^10", "8", Time)) 56.254 57.9945 77.58347 58.6855
levels(Time) <- sub("^10", "8", Time) 27.932 28.9770 32.59209 30.4035