0
考虑下面的模拟数据:R - base ::与字符变量交互的更快解决方案?
df <- data.frame(a=c("John", "Susan", "Eric", "John", "Susan"),
b=c("K", NA, "J", "K", "S"),
c=c("Smith", "Johnson", "May", "Smith", "Johnson"))
df$a <- as.character(df$a)
df$b <- as.character(df$b)
df$c <- as.character(df$c)
,看起来像这样:
> df
a b c
1 John K Smith
2 Susan <NA> Johnson
3 Eric J May
4 John K Smith
5 Susan S Johnson
我生成一个名为unique
列,它保存的三个字符变量之间的相互作用的唯一编号。
我使用ifelse
语句仅与列a
和c
交互,如果列b
是NA
。
df$unique <- NA
df$unique <- ifelse(is.na(df$b),
as.integer(interaction(df$a, df$c)),
as.integer(interaction(df$a, df$b, df$c)))
这导致:
> df
a b c unique
1 John K Smith 23
2 Susan <NA> Johnson 3
3 Eric J May 10
4 John K Smith 23
5 Susan S Johnson 9
当我使用此代码来构建unique
变量中包含数百万行的我的真实数据,这种计算21小时运行。
有什么方法可以加速这种性能?更聪明的解决方案?
ifelse
声明是瓶颈吗?