web-dev-qa-db-fra.com

Convertissez la colonne dataframe en 1 ou pour les valeurs "true"/"false" et affectez-la à dataframe

Dans l’écran R, je peux effectuer les opérations suivantes sur une colonne de caractères dans un cadre de données:

> data.frame$column.name [data.frame$column.name == "true"] <- 1
> data.frame$column.name [data.frame$column.name == "false"] <- 0
> data.frame$column.name <- as.integer(data.frame$column.name)

Je voudrais faire ceci en tant que fonction et j'ai essayé le code suivant, en entrant data.frame $ column.name comme arg1. Je vois que cela fonctionne lorsque je retourne (arg1), mais comment puis-je renvoyer l'opération dans le fichier data.frame d'origine?

boolean.integer <- function(arg1) {
  arg1 [arg1 == "true"] <- 1
  arg1 [arg1 == "false"] <- 0
  arg1 <- as.integer(arg1)
}
16
dsliberty

@chappers solution (dans les commentaires) fonctionne as.integer(as.logical(data.frame$column.name))

23
dsliberty

pouvez-vous essayer if.else

> col2=ifelse(df1$col=="true",1,0)
> df1
$col
[1] "true"  "false"

> cbind(df1$col)
     [,1]   
[1,] "true" 
[2,] "false"
> cbind(df1$col,col2)
             col2
[1,] "true"  "1" 
[2,] "false" "0" 
2
Ajay Ohri

Même quand vous avez finalement demandé le contraire, pour reformer les 0 et les 1 en éléments réels et falsifiés, j’ai publié une réponse sur la façon de transformer les valeurs fausses et authentiques en unités et en zéros (1 et 0), pour tout un cadre de données, en un seul fichier. ligne.

Exemple donné 

df <- structure(list(p1_1 = c(TRUE, FALSE, FALSE, NA, TRUE, FALSE, 
                NA), p1_2 = c(FALSE, TRUE, FALSE, NA, FALSE, NA, 
                TRUE), p1_3 = c(TRUE, 
                TRUE, FALSE, NA, NA, FALSE, TRUE), p1_4 = c(FALSE, NA, 
                FALSE,  FALSE, TRUE, FALSE, NA), p1_5 = c(TRUE, NA, 
                FALSE, TRUE, FALSE, NA, TRUE), p1_6 = c(TRUE, NA, 
                FALSE, TRUE, FALSE, NA, TRUE), p1_7 = c(TRUE, NA, 
                FALSE, TRUE, NA, FALSE, TRUE), p1_8 = c(FALSE, 
                FALSE, NA, FALSE, TRUE, FALSE, NA), p1_9 = c(TRUE, 
                FALSE,  NA, FALSE, FALSE, NA, TRUE), p1_10 = c(TRUE, 
                FALSE, NA, FALSE, FALSE, NA, TRUE), p1_11 = c(FALSE, 
                FALSE, NA, FALSE, NA, FALSE, TRUE)), .Names = 
                c("p1_1", "p1_2", "p1_3", "p1_4", "p1_5", "p1_6", 
                "p1_7", "p1_8", "p1_9", "p1_10", "p1_11"), row.names = 
                 c(NA, -7L), class = "data.frame")

   p1_1  p1_2  p1_3  p1_4  p1_5  p1_6  p1_7  p1_8  p1_9 p1_10 p1_11
1  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE
2 FALSE  TRUE  TRUE    NA    NA    NA    NA FALSE FALSE FALSE FALSE
3 FALSE FALSE FALSE FALSE FALSE FALSE FALSE    NA    NA    NA    NA
4    NA    NA    NA FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
5  TRUE FALSE    NA  TRUE FALSE FALSE    NA  TRUE FALSE FALSE    NA
6 FALSE    NA FALSE FALSE    NA    NA FALSE FALSE    NA    NA FALSE
7    NA  TRUE  TRUE    NA  TRUE  TRUE  TRUE    NA  TRUE  TRUE  TRUE

Ensuite, en exécutant cela: df * 1, tous les faux et les vrais sont transformés en 1 et en 0. Au moins, cela s'est produit dans la version R que j'ai (version R 3.4.4 (2018-03-15)). 

> df*1
  p1_1 p1_2 p1_3 p1_4 p1_5 p1_6 p1_7 p1_8 p1_9 p1_10 p1_11
1    1    0    1    0    1    1    1    0    1     1     0
2    0    1    1   NA   NA   NA   NA    0    0     0     0
3    0    0    0    0    0    0    0   NA   NA    NA    NA
4   NA   NA   NA    0    1    1    1    0    0     0     0
5    1    0   NA    1    0    0   NA    1    0     0    NA
6    0   NA    0    0   NA   NA    0    0   NA    NA     0
7   NA    1    1   NA    1    1    1   NA    1     1     1

Je ne sais pas s'il s'agit d'une commande "sûre" totale, dans toutes les conditions/dfs.

2
Elias EstatisticsEU

Puisque vous avez affaire à des valeurs supposées être booléennes, utilisez simplement == et convertissez la réponse logique en as.integer:

df <- data.frame(col = c("true", "true", "false"))
df
#     col
# 1  true
# 2  true
# 3 false
df$col <- as.integer(df$col == "true")
df
#   col
# 1   1
# 2   1
# 3   0
0

Essayez ceci, il convertira True en 1 et False en 0:

data.frame$column.name.num  <- as.nunumeric(data.frame$column.name)

Ensuite, vous pouvez convertir en facteur si vous voulez:

data.frame$column.name.num.factor <- as .factor(data.frame$column.name.num)
0
user9641147