Je dois créer une nouvelle variable LineItem_LongName codée comme 1 si la longueur de LineItem est supérieure à la moyenne, sinon 0.

J'ai essayé d'utiliser le code:

data <- data %>% mutate(LineItem_LongName = ifelse(length(LineItem)) > mean(LineItem)),1,0))

Mais ça me donne une erreur

Warning messages:
1: Problem with `mutate()` input `LineItem_LongName`.
i argument is not numeric or logical: returning NA
i Input `LineItem_LongName` is `ifelse(length(LineItem) > mean(LineItem))`. 
2: In mean.default(LineItem) :
  argument is not numeric or logical: returning NA

Que devrais-je faire? Je vous remercie!

0
Francois Ra 1 nov. 2020 à 14:58

2 réponses

Meilleure réponse

Voulez-vous vraiment comparer avec le length de LineItem ou LineItem lui-même?

Vous pouvez écrire avec ifelse comme:

library(dplyr)

data <- data %>% 
          mutate(LineItem_LongName = ifelse(LineItem > 
                  mean(LineItem, na.rm = TRUE),1,0))

Cependant, vous n'avez pas besoin de ifelse et vous pouvez écrire:

data <- data %>% 
            mutate(LineItem_LongName = as.integer(LineItem > 
                   mean(LineItem, na.rm = TRUE)))

Et en base R:

data$LineItem_LongName <- as.integer(data$LineItem > mean(data$LineItem, na.rm  = TRUE))
1
Ronak Shah 1 nov. 2020 à 12:37

Vous y êtes presque, il vous suffit de mieux comprendre certaines des fonctions.

  • Il existe une fonction len en Python mais pas en R donc vous obtiendrez une erreur si vous exécutez len(variable) dans R.
  • Pour mesurer le nombre de caractères d'une chaîne, vous pouvez utiliser nchar(str)nchar("hello") vous renvoie 5.
  • Cependant, il existe une fonction length dans R, qui est utilisée pour mesurer le nombre d'éléments pour un vecteur donné. length(c("hello","hello")) renverra 2.

J'ai créé un exemple, essayez-le et voyez si c'est ce que vous vouliez. La moyenne est de 5, donc il vérifie si la longueur des couleurs est supérieure à 5.

library(tidyverse)
df <- data.frame("Colours" = c("Red Red", "Red", "Green", "Green",NA), 
                 "Number" = c(1,2,3,4,5))

df
  Colours Number
1 Red Red      1
2     Red      2
3   Green      3
4   Green      4 
5    <NA>      5

df_new <- df %>% 
  mutate(LineItemLength = nchar(Colours)) %>% # Count number of characters including space
  mutate(LineItem_LongName = ifelse(LineItemLength > mean(LineItemLength,na.rm = T),1,0))

df_new
  Colours Number LineItemLength LineItem_LongName
1 Red Red      1              7                 1
2     Red      2              3                 0
3   Green      3              5                 0
4   Green      4              5                 0
5    <NA>      5             NA                NA

mean(df_new$LineItemLength,na.rm = T)
5 # Not 4
1
Andy 1 nov. 2020 à 13:56