0

別の骨の折れる要求。再コード化された変数を使用して分割表を作成しようとしています。回答は「1」としてコード化され、回答がないものは「0」としてコード化されます。

元のデータは次のようになっている可能性があります。文字列から再コード化された変数もあれば、数値から再コード化された変数もあります。

id   var1       recode    var2    recode2  ...   var250   recode250
1    "hello"     1         1         1     ... 
2    "hi"        1         <NA>      0     ...
3                0         <NA>      0     ... 
4     "hola"     1         1         1     ...  

この文字列の再コーディングを行うためのコードを少し書きましたが、これは分割表を使用してチェックします。

data$recode <- ifelse((as.numeric(data$var1)!=1), 1, 0) #RECODES STRINGS
table(data$recode)
    0     1
    1     3

ただし、他のすべての変数の NA を 0 になるように再コーディングする必要もあります。別の ifelse ステートメントでこれを実行しようとしました。

 data <- ifelse(is.na(data), 0, 1)

値が変化しているように見えますが、同じ分割表を実行しようとすると、次のエラー メッセージが表示されます。

  Error in data$recode : $ operator is invalid for atomic vectors

当面の重要な問題は、すべての変数の分割表を作成できるようにする必要があることです(つまり、パーセンテージと頻度を報告します)。そのため、(列の範囲内の) すべての NA を 0 に正しく再コード化する方法を教えてください。とても役に立ちます。ありがとう!

4

1 に答える 1

0

data$var1を使用する代わりに、文字を強制してから文字を数えたいと思いますas.numericlogical変数がバイナリで あるという事実を使用することもできas.numeric(c(TRUE, FALSE))ますc(1, 0)

data <- data.frame(var1 = c('hello','hi','','lola'), 
                   var2 = c(1,NA,NA,1))

data$recode_1 <- as.numeric(nchar(as.character(data$var1)) > 0)
data$recode_2 <- as.numeric(!is.na(data$var2))
data


##    var1 var2 recode_1 recode_2
## 1 hello    1        1        1
## 2    hi   NA        1        0
## 3         NA        0        0
## 4  lola    1        1        1

編集 -- 複数の列を処理する

一度に多くの列を実行するにはplyr、 、colwisecatcolwiseおよびの関数を使用しますnumcolwise。これらはそれぞれ列単位、離散データの列単位、数値データの列単位の関数を適用します

library(plyr)                   
recode_character <- function(.col){
 as.numeric(nchar(as.character(.col)) > 0 )
}

recode_numeric <- function(.col){
  as.numeric(!is.na(.col))
}
data_more <- data.frame(var1 = c('hello','hi','','lola'), var2 = c(1,NA,NA,1), var3 = c(1,1,NA,NA), var4 = c('again','with','','Missing'))

recoded_data <- cbind(catcolwise(recode_character)(data_more),
      numcolwise(recode_numeric)(data_more))

recoded_data

##   var1 var4 var2 var3
## 1    1    1    1    1
## 2    1    1    0    1
## 3    0    0    0    0
## 4    1    1    1    0
于 2012-07-16T23:35:37.060 に答える