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)
}
@chappers solution (dans les commentaires) fonctionne as.integer(as.logical(data.frame$column.name))
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"
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.
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
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)