将数字向量中的交替值拆分为R中数据帧的列

时间:2017-10-12 13:23:14

标签: r

我有一个名为data的数据框,其中包含一列名为" time的数字向量。"每行都是它自己的向量。

>data[1, ]$time
3000 3000 2991 2961 2958 2947 2925 2836 2890

>str(data$time)
$ time             :List of 20
..$ : num  3000 3000 2991 2961 2958 ...

我想将时间列的每个行值转换为数据帧,使得每个奇数索引值都在数据帧的一列中,称为" odd"每个偶数索引值都在一个名为"偶数的列中。"

以下是我如何做到的一个虚拟示例:

test <- c(3000,3000,2991,2961,2958,2947)
test <- data.frame(test)
odd <- test[ c(TRUE,FALSE), ] 
even <- test[ !c(TRUE,FALSE), ]
finalData <- data.frame(odd = odd, even = even )

结果输出现在是:

> finalData
   odd even
1 3000 3000
2 2991 2961
3 2958 2947

我无法弄清楚如何使用上面的实际数据帧逐行执行此过程。我想用包含两个奇数和偶数列的数据帧替换上面数据帧中的时间列。这是清楚的吗?

1 个答案:

答案 0 :(得分:1)

我猜你的数据看起来像这样吗?

time <- list(1:4, 1:6, 1:3)
data <- data.frame(cbind(time), dd=1:3)

data
#               time dd
# 1       1, 2, 3, 4  1
# 2 1, 2, 3, 4, 5, 6  2
# 3          1, 2, 3  3

在这种情况下,这样的事情应该

lapply(data$time, function(x) {
    odd <- seq_along(x) %% 2 == 1
    o <- x[odd]
    e <- x[!odd]
    length(e) <- length(o)
    data.frame(o, e)
    })

# [[1]]
#   o e
# 1 1 2
# 2 3 4

# [[2]]
#   o e
# 1 1 2
# 2 3 4
# 3 5 6

# [[3]]
#   o  e
# 1 1  2
# 2 3 NA

请注意,这要求每个向量中的奇数和偶数值相等。如果您不能保证您需要使用NA填充或存储在列表中。