这是一个示例数据框。
x <- c(1,2,3)
y <- c(10,10,10)
d <- data.frame(x, y)
我想生成第三个变量(z),其中包含x:y中所有值的向量。例如,z的第一个值应为c(1,2,3,4,5,6,7,8,9,10)。
我该怎么做?尝试d$z <- d$x:d$y
只会产生错误“数值表达式包含3个元素:仅使用第一个。”
答案 0 :(得分:4)
mapply(":", x, y)
与RLave答案相同,但不需要额外的程序包。
答案 1 :(得分:1)
使用purrr
包和函数map2
:
purrr::map2(x,y, function(x,y) x:y)
# [[1]]
# [1] 1 2 3 4 5 6 7 8 9 10
#
# [[2]]
# [1] 2 3 4 5 6 7 8 9 10
#
# [[3]]
# [1] 3 4 5 6 7 8 9 10
当然,由于长度不同,因此需要给出list
。请注意,可以通过一个简单的循环来实现相同的目的。
答案 2 :(得分:1)
也以R为底
d$z <- lapply(1:nrow(d), function(i) with(d[i, ], x:y))
> str(d)
'data.frame': 3 obs. of 3 variables:
$ x: num 1 2 3
$ y: num 10 10 10
$ z:List of 3
..$ : int 1 2 3 4 5 6 7 8 9 10
..$ : int 2 3 4 5 6 7 8 9 10
..$ : int 3 4 5 6 7 8 9 10