簡體   English   中英

使用 for 循環和 if else 語句創建數據框

[英]Creating a data frame with a for loop and if else statement

我一直在這里尋找解決方案,但似乎沒有什么對我有用,所以如果這恰好是一個重復的問題,我提前道歉。 如果是,並且使用的示例也是示例,請告訴我可以在哪里查找。 這不是一個容易命名的。 我預先感謝您在這方面花費的任何時間。

問題:我有一個包含 1 列和大約幾十萬行的數據集。 我需要創建 178 列和多少行。

提供數據的順序是它必須保持的順序。

例如,數據集的前 178 行都需要成為第 1 行。接下來的 178 列數據需要成為第 2 行。這種情況一直持續到數據幀結束。

下面的代碼將創建一個包含 1000 行字母的示例。 它還包含我迄今為止嘗試過的內容。

我覺得我很接近,但結果並不是我所期望的。 當數據變成新行列中的第 3 行時,它變得有點奇怪。 當它超過前 178 列時,它也會變得很奇怪。 它連續兩次重復第 1 列。

任何幫助都會很棒。 如果需要進一步說明,請詢問。 但是,當您運行代碼並環顧第 1 行變為第 2 行以及第 2 行變為第 3 行的位置時,您應該會看到奇怪的結果。

編輯 1:我確實需要補充一點,這需要是長格式而不是寬格式。 本質上,它需要采用示例提供的格式。 對於標題中的錯誤陳述,我深表歉意。 我已更改標題以刪除單詞矩陣。

我嘗試過的和樣本數據:

rna = data.frame(sample(letters, size=1000, replace=TRUE))

x = 1
row = 1
y = 0
column = 1

for (i in 1:nrow(rna)) {

  if (x < 178) {
    rna$rowNum[i] = row
    x = x + 1
    } else {
      row = row + 1
      x = 1
    }

  if (y < 178) {
    rna$colNum[i] = column
    column = column + 1
    y = y + 1
  } else {
    column = 1
    y = 0
  }
}

在澄清你的問題后編輯OK,我想我知道你想要什么,一個 3 列的 data.frame,帶有值、rowNum 和 colNum。 一種方法是使用rep ,然后從分量向量組裝 data.frame。

rna = data.frame(sample(letters, size=1000, replace=TRUE))
n.cols <- ceiling(nrow(rna) / 178)
col.vector <- rep(1:178,times = n.cols)
row.vector <- rep(seq(1,n.cols),each = 178)
result <- data.frame(value = as.vector(rna), rowNum = row.vector[1:nrow(rna)], colNum = col.vector[1:nrow(rna)])
colnames(result)[1] <- "value"
result
    value rowNum colNum
1       h      1      1
2       w      1      2
3       v      1      3
4       g      1      4
5       l      1      5
6       y      1      6
7       t      1      7
8       n      1      8
9       q      1      9
10      d      1     10

我們可以創建一組 178 個值並將數據轉換為寬格式。

library(dplyr)

rna %>%
 group_by(grp = rep(seq_along(temp), each  = 178, length.out = n())) %>%
 mutate(col = paste0('col', row_number())) %>%
 tidyr::pivot_wider(names_from = col, values_from = temp)

數據

rna = data.frame(temp = sample(letters, size=1000, replace=TRUE))

暫無
暫無

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

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