【发布时间】:2020-05-12 18:40:38
【问题描述】:
我有以下数据表,列“字符”类
dt <- data.table(V1 = c("0", "1", "1/2", "4"), V2 = c("1/2", "3/4", "", ""))
我希望仅在第二列和第一列自然数中包含所有分数。我想出了以下解决方案:
if(str_detect(new$V1, "/")){
new$V2 <- new$V1
new$V1 <- 0
}
并且还尝试将其嵌入到函数中并以sapply 结束。
FractionExtraction <- function(x, y) {
if(str_detect(x, "/")){
y <- x
} else {y <- y}
y
}
dt$V2 <- sapply(dt$V1, FractionExtraction, dt$V2)
我也尝试在 if 语句中使用 %in%,或者将“
Warning message:
In if (str_detect(new$V1, "/")) { :
the condition has length > 1 and only the first element will be used
理想情况下,输出应如下所示:
> dt
V1 V2
1: 0 1/2
2: 1 3/4
3: 0 1/2
4: 4
任何帮助将不胜感激!
【问题讨论】:
-
您认为在 data.table 上使用 dplyr 是否有问题?我选择了另一个,只是因为我发现语义更直接。例如,我不太理解 := 符号……让我说另一个对我来说更容易
-
我知道了,但我认为当您的数据构造是 data.table 并且效率更高时,您需要一个 data.table 解决方案
-
你说使用更少的内存?很高兴知道,谢谢!
标签: r if-statement sapply