在此先感謝,如果有不清楚的地方,很抱歉,這是我第一次在這里發帖。我正在做一些應該相當簡單的事情,但我似乎找不到讓它作業的方法。
我要完成的任務如下:我有一個包含數百個變數的資料集。我需要按照相同的邏輯重新編碼它們。邏輯如下:如果GIVEN VARIABLE == 0和特定變數 == 1,則GIVEN VARIABLE 必須 = -1。特定變數對所有這些都是相同的。
我所做的如下:
set.seed(123)
data=data.table(a = 0:10, b= 0:10, c = 0:10, d = 1:0)
這里“d”是特定變數,a:c 是給定變數
list_variables <- names(data)
list_variables_v2 <- list_variables[-c(4)]
我從資料集中提取了變數的名稱(減去 d)并將它們放在一個串列中,以便可以將它們輸入回圈
data_v1 = copy(d)
for(i in (list_variables_v2)) {
data_v1[(i) == 0 & d == 1, (i) := -1]
}
有問題的是,當我運行回圈時,什么也沒有發生。那些符合條件的變數(例如a == 0 & d == 1)不會被重新編碼為-1。可能會發生各種問題,但我認為我已將它們減少為一個。潛在問題:
a) 代碼,即使在回圈之外,也不起作用。但是這是錯誤的。以下代碼產生預期的結果:
data_v1[a == 0 & d == 1, a := -1]
b) 回圈不作業,因此,變數名沒有真正排序和識別。盡管如此,如果我排除 (i) == 0 條件,代碼確實有效,這意味著回圈適用于右側:
for(i in (list_variables_v2)) {
data_v1[d == 1, (i) := -1]
}
我認為問題的根源在于,在行過濾端,R 沒有將 (i) == 0 識別為例如 a == 0。考慮到 R 在處理右側(列),確實認識到 (i) := -1 為例如 a := -1。關于可能導致此問題的任何想法,并希望如何解決它?
再次,非常感謝,如果有什么不清楚或重復,請告訴我。
uj5u.com熱心網友回復:
一個簡單的更正是用get
for(i in (list_variables_v2)) {
data_v1[get(i) == 0 & d == 1, (i) := -1]
}
-輸出
> data_v1
a b c d
<int> <int> <int> <int>
1: -1 -1 -1 1
2: 1 1 1 0
3: 2 2 2 1
4: 3 3 3 0
5: 4 4 4 1
6: 5 5 5 0
7: 6 6 6 1
8: 7 7 7 0
9: 8 8 8 1
10: 9 9 9 0
11: 10 10 10 1
> data
a b c d
<int> <int> <int> <int>
1: 0 0 0 1
2: 1 1 1 0
3: 2 2 2 1
4: 3 3 3 0
5: 4 4 4 1
6: 5 5 5 0
7: 6 6 6 1
8: 7 7 7 0
9: 8 8 8 1
10: 9 9 9 0
11: 10 10 10 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/452806.html
