gpt4 book ai didi

r - 如何防止 data.table 在不手动指定这些的情况下将数字变量强制转换为字符变量?

转载 作者:行者123 更新时间:2023-12-04 17:08:39 24 4
gpt4 key购买 nike

考虑以下数据集:

dt <- structure(list(lllocatie = structure(c(1L, 6L, 2L, 4L, 3L), .Label = c("Assen", "Oosterwijtwerd", "Startenhuizen", "t-Zandt", "Tjuchem", "Winneweer"), class = "factor"), 
lat = c(52.992, 53.32, 53.336, 53.363, 53.368),
lon = c(6.548, 6.74, 6.808, 6.765, 6.675),
mag.cat = c(3L, 2L, 1L, 2L, 2L),
places = structure(c(2L, 4L, 5L, 6L, 3L), .Label = c("", "Amen,Assen,Deurze,Ekehaar,Eleveld,Geelbroek,Taarlo,Ubbena", "Eppenhuizen,Garsthuizen,Huizinge,Kantens,Middelstum,Oldenzijl,Rottum,Startenhuizen,Toornwerd,Westeremden,Zandeweer", "Loppersum,Winneweer", "Oosterwijtwerd", "t-Zandt,Zeerijp"), class = "factor")),
.Names = c("lllocatie", "lat", "lon", "mag.cat", "places"),
class = c("data.table", "data.frame"),
row.names = c(NA, -5L))

当我想将最后一列中的字符串拆分为单独的行时,我使用(使用 data.table 1.9.5+ 版):
dt.new <- dt[, lapply(.SD, function(x) unlist(tstrsplit(x, ",", fixed=TRUE))), by=list(lllocatie,lat,lon,mag.cat)]

但是,当我使用:
dt.new2 <- dt[, lapply(.SD, function(x) unlist(tstrsplit(x, ",", fixed=TRUE))), by=lllocatie]

除了所有列都被强制转换为字符变量之外,我得到了相同的结果。问题在于,对于小数据集,指定不必在 by 中拆分的变量并不是什么大问题。参数,但对于具有许多列/变量的数据集。我知道使用 splitstackshape 可以做到这一点。包(如 @ColonelBeauvel in his answer 所述),但我正在寻找 data.table解决方案,因为我想将更多操作链接到此。

如何在不手动指定不必在 by 中拆分的变量的情况下防止这种情况发生争论?

最佳答案

两种解决方案 data.table :

1 : 使用 type.convert=TRUE内部争论 tstrsplit()正如@Arun 所提议的:

dt.new1 <- dt[, lapply(.SD, function(x) unlist(tstrsplit(x, ",", fixed=TRUE, type.convert=TRUE))), by=lllocatie]

2 : 使用 setdiff(names(dt),"places")by @Frank 提出的论点:
dt.new2 <- dt[, lapply(.SD, function(x) unlist(tstrsplit(x, ",", fixed=TRUE))), by=setdiff(names(dt),"places")]

两种方法都给出相同的结果:
> identical(dt.new1,dt.new2)
[1] TRUE

第二种解决方案的优点是,当您有多个带有字符串值的列时,只有您在 setdiff(names(dt),"places") 中指定的列。正在被拆分(假设你只想要那个特定的,在这种情况下 places ,来拆分)。 splitstackshape包也提供了这个优势。

关于r - 如何防止 data.table 在不手动指定这些的情况下将数字变量强制转换为字符变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31568459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com