簡體   English   中英

如何使用常規字符串值序列在 data.table 中創建新列?

[英]How do I create a new column in a data.table with a regular sequence of string values?

我之前使用 $<- 和 c(rep()) 在 R 中的 data.table 中創建了一個定期出現的字符串值的新列。

my_data$component <- as.factor(c((rep("Con",1)),(rep("Neu",1)),(rep("Inc",1))))

由於我在分析中發現錯誤而回到我的腳本進行更改(幾個月后),此代碼片段不再有效,並且我收到以下錯誤獎勵:

Supplied 3 items to be assigned to 216 items of column 'c'. The RHS length must either be 1 (single values are ok) or match the LHS length exactly. If you wish to 'recycle' the RHS please use rep() explicitly to make this intent clear to readers of your code.

我知道解決方案可能圍繞 data.table 中的:=函數展開,但我不是 R 向導(這些腳本是作為第一次涉足 R 編寫的,試圖放棄 SPSS 和 Excel 作為心理學家)。 我不明白如何在 RHS 上使用 rep() 來達到相同的結果。

我想要的只是“con”、“neu”和“inc”在新列中定期復制我的 data.table 的長度。 我在 data.table 包 pdf 中讀到 RHS 是“替換值列表。它以通常的方式回收以填充滿足 i 的行數,如果有的話。”。

我知道以通常的方式回收意味着回收發生到矩陣的末尾。

這是我嘗試過的東西,它也給出了同樣的錯誤。

dt <- data.table(A=(1:9))
dt
   A
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
8: 8
9: 9

dt[ , 'c' := .("con","neu","inc")]

我會很感激任何幫助,因為我嘗試解決這個看似簡單的問題的時間越長,以前在給定 data.table 的所謂功能的情況下使用不太理想的代碼,我覺得越愚蠢。

要完成您當前的任務,您可以執行以下操作:

library(data.table)
dt <- data.table(A = 1:9)
dt[ , c := rep_len(c("con","neu","inc"), .N)]
dt
   A   c
1: 1 con
2: 2 neu
3: 3 inc
4: 4 con
5: 5 neu
6: 6 inc
7: 7 con
8: 8 neu
9: 9 inc

請注意,這是data.table一個相對較新的功能(從 2019 年 4 月 7 日開始)。官方解釋

:=不再回收長度> 1 RHS 向量。 當回收留下余數時有警告,但當 LHS 長度是 RHS 長度的精確倍數時沒有警告(與基數 R 相同的行為)。 幾年來的一致反饋是,回收通常是一個錯誤。 在需要回收長度> 1 向量的極少數情況下,請明確使用rep() 單個值仍然像以前一樣靜默回收 [...]

暫無
暫無

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

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