我发现,当我使用数据表并使用带引号的字符串将行和列作为子集并尝试将结果乘以向量时,并不会乘以所有值,而只会乘以第一个值。有这种现象的原因吗?
library(data.table)
v1 <- seq(1,10)
dtab <- data.table('a' = v1)
dframe <- data.frame('a' = v1)
dframe$a * dtab[2, "a"]
# a
# 1: 2
dtab$a * dtab[2, "a"]
# a
# 1: 2
dframe$a * dtab[2, a]
# 2 4 6 8 10 12 14 16 18 20
dtab$a * dframe[2, 'a']
# 2 4 6 8 10 12 14 16 18 20
packageVersion('data.table')
# 1.12.8
在dtab[2, "a"]
仍然是一个data.table
具有一行,
str(dtab[2, "a"])
#Classes ‘data.table’ and 'data.frame': 1 obs. of 1 variable:
# $ a: int 2
而下面的结果是 vector
str(dtab[2, a])
#int 2
根据 ?data.table
只要j返回一个列表,该列表的每个元素都会成为结果data.table中的一列。当j的输出不是列表时,输出将原样返回(例如x [,a]返回列向量a),除非使用by,在这种情况下,为了方便起见,将其隐式包装在列表中(例如x [,sum(a),by = b]将创建一个名为V1的列,每个组的值均为sum(a)。
当j是列名称或要选择的位置的向量时(如data.frame)。不再需要使用with = FALSE。
我们可以使用[[1]]
或将其转换为向量,unlist
然后进行乘法
dframe$a * dtab[2, "a"][[1]]
#[1] 2 4 6 8 10 12 14 16 18 20
如果我们有一个data.table/data.frame
,则单位是一列,而不是列中的元素
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句