簡體   English   中英

R,將for循環結果放入向量中,並將該向量添加到數據幀中

[英]R, putting a for loop result into a vector and adding this vector to a data frame

我制作了一個 for 循環,它需要延遲(時間)並輸出看到的總分。 (即:延遲=1000,看到的分數=“一”)。 我想將 for 循環的結果放入我當前的數據框中,在一個新列中。 所以,例如,會有一個列,“一”,“二”,“一”..等等。有人能幫我嗎?

這是我到目前為止所嘗試的:

我嘗試從這個 for 循環創建一個向量。 我讀到其他問題,最好使用 R 上的向量。

首先,我把這個for循環變成了一個名為“score”的function:

 score <- function(i){ if(i<1000){ print("one") }else if(i<2000){ print("two") } else if (i < 3000){ print("three") } else if (i < 4000){ print("four") }else if (i < 5000){ print("five") }else if(i < 6000){ print ("six ") }else if(i<7000){ print("seven") }else { print("other") } }

然后我使用lapply function 將score function 應用到我的DDM dataframe,更具體地說是我的Latency列。 我將此lapply分配給一個名為Lat的向量:

 Lat <- lapply(DDM$latency, score) Lat

這是 function 的 output,我只包含了幾行,因為它很長:

 [[1]] [1] "three" [[2]] [1] "one" [[3]] [1] "two" [[4]] [1] "one" [[5]] [1] "one" [[6]] [1] "one" [[7]] [1] "one" [[8]] [1] "one" [[9]] [1] "one" [[10]] [1] "one" [[11]] [1] "one"

然后我將此向量作為列添加到我的數據框中。

 DDM$Newlat<- c(Lat)

但問題是當我運行我的 dataframe,“DDM”,並查看每行顯示“<chr [1]>”的新列時。 我認為這可能是因為我的 for 循環的 output 是字符。

如果我運行 dataframe,這是我的新專欄Newlat的輸出:

 <chr [1]> <chr [1]> <chr [1]> <chr [1]> <chr [1]> <chr [1]>

看看我已經嘗試過的,有沒有更好的方法或方法來修復我當前的代碼,以便有一個新列,其中包含我想要的 output。

提前謝謝你的幫助!!

  • print只打印值,它不return它。 如果要保存,請使用return
  • 您不應該使用lapply為每個值一個一個地執行此操作。 有一些矢量化的方法可以實現這一點。 您可以在此處使用ifelse傳遞整個向量 ( DDM$latency )。 嵌套ifelse的簡化版本是dplyr::case_when
  • 您實際上應該在此處使用cut / findInterval 就像是:
DDM$Newlat <- cut(DDM$latency, c(seq(0, 700, 100), Inf), 
    labels = c('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'other'))

暫無
暫無

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

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