如何在包含两个其他变量之间所有数字的向量的数据集中创建变量?

时间:2018-12-10 16:22:59

标签: r

这是一个示例数据框。

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个元素:仅使用第一个。”

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