R语言:如何将double类型数据转换为指定结构的data.table?
解决方法:将double类型数据转换为目标data.table
看起来你是把带序号的单词和对应词频以特殊结构存在double类型数据里了对吧?setDT确实没法直接作用于向量,因为它是用来把已有的列表或data.frame原地转成data.table的。咱们换个思路拆解数据再构建目标表,具体分两种常见场景处理:
场景1:你的数据是命名double向量(最可能的情况)
如果你的原始数据是类似这样的命名向量(单词作为向量名称,词频作为向量值):
library(data.table) # 模拟你的原始double数据 my_data <- c(`2.policy` = 37, `3.payments` = 51, `4.supervisory` = 45, `5.housing` = 22, `6.inflation` = 11)
直接用data.table构造函数拆分名称和值即可:
# 构建包含"单词"和"数字"列的data.table dt <- data.table( 单词 = names(my_data), 数字 = my_data # 本身就是double类型,无需额外转换 ) # 如果需要去掉单词里的序号前缀(比如把"2.policy"改成"policy"),可以加这一步 dt[, 单词 := sub("^\\d+\\.", "", 单词)]
场景2:你的数据是扁平混合向量(单词和词频交替存储)
如果你的原始数据是一个扁平向量(比如开头的V1是表头,后面交替是单词和词频),先拆分出两列再构建:
library(data.table) # 模拟你的原始扁平数据 my_data <- c("V1", "2.policy", 37, "3.payments", 51, "4.supervisory", 45, "5.housing", 22, "6.inflation", 11) # 提取单词(从第2个元素开始,每隔1个取一个) words <- my_data[seq(2, length(my_data), by = 2)] # 提取词频并转成double类型 numbers <- as.double(my_data[seq(3, length(my_data), by = 2)]) # 构建data.table dt <- data.table(单词 = words, 数字 = numbers) # 同样可以去掉序号前缀 dt[, 单词 := sub("^\\d+\\.", "", 单词)]
为什么setDT不行?
setDT()的作用是把已经是列表或data.frame的对象原地转换为data.table,而你的原始数据是double向量(不管命名与否),不属于它的处理范围。所以得先把向量转换成两列的结构,再用data.table()构造函数创建,或者先转成data.frame再用setDT():
# 先转成data.frame再转成data.table df <- data.frame(单词 = names(my_data), 数字 = my_data, stringsAsFactors = FALSE) setDT(df)
内容的提问来源于stack exchange,提问作者jalaj pathak
相关产品推荐
相关产品推荐

