2014-10-10 139 views
1

我已經看過類似的帖子,但沒有得到任何工作。根據R中的其他列創建新的數據幀列

我有一個字符爲1,2,3,4,5的列,它們是面試問題的答案 我想要一個新列,當回答是1或2時,新列是否,當回答是3新列是Partly,當回答是4或5時是Yes,其他都是NA。

data.frame': 405 obs. of 1 variables: 
$ SQ023A  : chr "-3" "-3" "-3" "-3" ...(this has -1, -2, -3, -4, 1, 2, 3, 4, 5, Yes, No, Partly) 

新列應保持是,否,可能有答案,但有部分代替1和2號,4和5是的,3。其他都是NA。

我曾嘗試沒有成功以下

sq23$test <- ifelse(("1"|"2", sq23$SQ23A), "No", 
      ifelse("4"|"5", sq23$SQ23A), "Yes", 
      ifelse("3", sq23$SQ23A), "Partly","NA")) 
+0

請訪問:http://stackoverflow.com/questions/26290876/how-can-i-add-a-column-based-on-condition-in-r/26292010?noredirect=1#comment41261414_26292010 – KFB 2014-10-10 11:12:35

回答

3

嘗試:

sq23$test <- c("No","No","Partly","Yes","Yes")[as.numeric(sq23$SQ23A)] 

編輯:

在你編輯的光,我要去給一個更通用的解決方案這種問題。首先我們建立一個包含我們想要替換的舊值的向量。然後,我們定義另一個有替換的向量。然後我們通過match函數來完成這個技巧。例如:

#create a sample of your data 
    sq23<-data.frame(SQ023A=sample(c(-4:5,"Yes","No","Partly"),size=405,replace=TRUE)) 
    #define the old values to replace 
    oldValues<-c(1:5,"Yes","No","Partly") 
    #define the replacement (each value of newValues replace the corresponding of oldValues) 
    newValues<-c("No","No","Partly","Yes","Yes","Yes","No","Partly") 
    #create the test column 
    sq23$test<-newValues[match(sq23$SQ023A,oldValues)] 
+0

嗯我得到一個沒有添加列的錯誤(sq23 $ SQ023A)] 錯誤c(「否」,「否」,「否」,「部分」,「是」,「是」 「,」部分「,」是「,」是「)[as.numeric(sq23 $ SQ023A)]:只有0可能與否定下標混合在一起此外:警告消息:強制引入NAA – Jen 2014-10-10 11:09:53

+0

我看到您的編輯並已更改我的答案。看一看,看看它是否有幫助。 – nicola 2014-10-10 12:30:33

+0

感謝:-)這是一個非常巧妙的把戲。我導出了文件並檢查了它的準確性。如果在原始列中沒有存在「是」,「否」或「部分」,我還檢查了以下方法。如果你這樣做的話,他們會用NA來寫,而受訪者的迴應將會丟失。 再次感謝你,讓我的星期五。 sq23 $ test < - 不適用 sq23 $ test [sq23 $ SQ23A == 1 | sq23 $ SQ23A == 2] < - 「否」 sq23 $ test [sq23 $ SQ23A == 4 | sq23 $ SQ23A == 5] < - 「是」 sq23 $ test [sq23 $ SQ23A == 3] < - 「部分」 – Jen 2014-10-10 12:58:37

3

爲清楚起見,我會做:

sq23$test<- NA 
sq23$test[sq23$SQ23A == 1 | sq23$SQ23A == 2]<- "No" 
sq23$test[sq23$SQ23A == 4 | sq23$SQ23A == 5]<- "Yes" 
sq23$test[sq23$SQ23A == 3]<- "Partly" 

根據您的編輯,以及更一般的情況下,你也可以使用一個字典類型的解決方案:

values<- c("no", "no", "partly","yes","yes","yes","no","partly") # new value 
names(values)<- c(1:5, "yes", "no", "partly") # keys 
> values 
     1  2  3  4  5  yes  no partly 
    "no"  "no" "partly" "yes" "yes" "yes"  "no" "partly" 
sq23$test<- values[as.character(sq23$SQ23A)] 
# as.character() used to make sure that the keys/old values are passed as 
# characters, and not e.g. a factor 
+0

非常感謝您的幫助。你的代碼回答了我最初的問題,並將在我處理的其他一些情況下工作。祝你有美好的一天。 – Jen 2014-10-10 13:00:25

+0

@Jen我已經添加了另一個更通用的解決方案,基於您的編輯,只是爲了顯示可以完成的另一種方式(除了尼科拉)。 – fileunderwater 2014-10-10 13:29:18

相關問題