簡體   English   中英

將數字向量中的交替值拆分為 R 中數據幀的列

[英]Split alternating values in a numeric vector into columns of a data-frame in R

我有一個名為 data 的數據框,其中包含一列名為“時間”的數字向量。 每一行都是它自己的向量。

>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”的數據幀列中,每個偶數索引值都位於名為“even”的列中。

這是我如何做到這一點的虛擬示例:

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

我只是無法弄清楚如何使用上面的真實數據框逐行執行此過程。 我想用包含兩個奇數和偶數列的數據幀替換上述數據幀中的時間列。 這清楚嗎?

我猜你的數據看起來像這樣?

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 填充或存儲在列表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM