问题相当简单。出于某种原因,我想不出一个简单的解决方案,我不能在网上找到一个。我们假设这是我的数据,其中变量是一个因素:
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
我该怎么做?
答案 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