Преобразование строк - цикл For для категориальных переменных

Привет всем, я новичок в R и ценю ваши советы по этому поводу. Я изо всех сил пытался преобразовать переменные (объекты) в моем dataframe в string и построить их с помощью цикла for, как подробно описано ниже.

COUNTRY: China Belgium ...
COMPANY: XXX Inc. YYY Inc. ...

Здесь СТРАНА и КОМПАНИЯ - категориальные переменные.

Я использовал toString(), а также as.character() для преобразования имени переменной в string, поэтому я могу указать имя сюжета, но не могу заставить его работать. Мне нужны 4 переменные, как указано в приведенном ниже коде в цикле for для двух целей:

  • как строка для наименования сюжета
  • использовать в barplot()

но ни преобразование строк, ни цикл for не работают должным образом, как я хотел. Может ли кто-нибудь помочь мне с правильной командой для этой цели? Ваша помощь очень ценится ... С уважением,

КОД

Frequency_COUNTRY <- table(COUNTRY)#Get Frequency for COUNTRY 
Relative_Frequency_COUNTRY <- table(COUNTRY) / length(COUNTRY)#Get Relative 
#Frequency (Percentage %) for Variable COUNTRY
Frequency_COMPANY <- table(COMPANY) #Get Frequency and Relative Frequency for COMPANY
Relative_Frequency_COMPANY <- table(COMPANY) / length(COMPANY)
Categorical_Variable_List = c(Frequency_COUNTRY,
                        Relative_Frequency_COUNTRY ,
                        Frequency_COMPANY,
                        Relative_Frequency_COMPANY)`# Get list of 4 variables above
for (Categorical_Variable in Categorical_Variable_List){#Plot 4 variables using a for loop
     A = toString(Categorical_Variable) #Trying to convert non-string variable name to string
plotName <- paste("BarChart_", A, sep = "_")# Specify plot name, e.g. BarChart_Frequency_COUNTRY
png(file = plotName)#Create png file 
barplot(Categorical_Variable) #use barplot() to make graph
dev.off()`# Switch off dev
}   

Я не могу прочитать твой вопрос. Исправьте форматирование. Каждая строка кода должна иметь в начале четыре или более пробелов. НЕ ставьте кавычки вокруг кода.

Tim Biegeleisen 17.12.2018 07:24

Также, пожалуйста, используйте dput в вашем фрейме данных / его образце и загрузите сюда

Omry Atia 17.12.2018 07:27

Уважаемый Омри Атия. Теперь я использовал dput для создания образца фрейма данных. Теперь он находится в моей переменной среды. Кажется, я не могу его спасти. Не могли бы вы подробнее рассказать, как его сохранить и загрузить? Большое спасибо!

Riccardo 17.12.2018 08:31

@Riccardo Прочтите принятый ответ здесь о том, как пользователи сайта ожидают вывода dput().

Z.Lin 17.12.2018 09:14

1) Ваш Categorical_Variable_List вообще категоричен к нет. 2) Используйте Categorical_Variable_List <- list(...), а не c(...).

Rui Barradas 17.12.2018 10:50

@RuiBarradas. Привет, Руи, большое спасибо за ответ на мой вопрос. Я использую list(Frequency_COUNTRY,...), как вы указали, однако toString () не выводит имя объекта, то есть «Frequency_COUNTRY» в виде строки. Вместо этого он генерирует строку значений в таблице частот, как показано ниже: toString(Frequency_Country) >>> [1] "1, 5, 4, 4, 1, 2, 2, 3, 9, 1, 13, 2, 1, 2 , 1, 1, 1, 1, 1, 1, 2, 1, 7, 52, 1 ". На самом деле я намереваюсь преобразовать имя объекта Frequency_Country, которое представляет собой частотную таблицу стран, в строку, чтобы я мог использовать ее для названия своего сюжета.

Riccardo 18.12.2018 02:43

@RuiBarradas Привет, Руи. Большое спасибо за то, что нашли время исправить код. Теперь он работает правильно. Еще один последний вопрос. Я заметил, что вы используете [[i]] в Variable_List[[i]]. интересно, почему [i] не работает. Это потому, что мы используем (Frequency_COUNTRY = Frequency_COUNTRY ... в списке ()? Вы сделали то же самое для Variable_Name[[i]]. Однако, когда я делаю это на консоли: Variable_Name[1], я получаю желаемое имя объекта: [1] "Frequency_Country", которое отлично служит моей цели. Не могли бы вы подробнее рассказать об использовании двойных квадратных скобок [[]]. Многие думают заранее. Ваше здоровье.

Riccardo 19.12.2018 02:17

Проверьте R для науки о данных.

Rui Barradas 19.12.2018 12:57

@RuiBarradas. Большое спасибо :)

Riccardo 21.12.2018 07:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
160
1

Ответы 1

Ваш код обрабатывает Categorical_Variable_List, как если бы это был список переменных категоричныйназванный. Это ни то, ни другое.

Следующий код исправляет эти ошибки и строит график из 4 гистограмм. В своем коде удалите два вызова par, один до и другой после цикла for.

Я создам набор данных, чтобы протестировать код.

set.seed(1234)

n <- 20
COUNTRY <- sample(LETTERS[1:5], n, TRUE)
COMPANY <- sample(letters[1:4], n, TRUE)

Frequency_COUNTRY <- table(COUNTRY)    # Get Frequency for COUNTRY 
Relative_Frequency_COUNTRY <- table(COUNTRY) / length(COUNTRY)#Get Relative 
# Frequency (Percentage %) for Variable COUNTRY
Frequency_COMPANY <- table(COMPANY)    # Get Frequency and Relative Frequency for COMPANY
Relative_Frequency_COMPANY <- table(COMPANY) / length(COMPANY)

Variable_List <- list(Frequency_COUNTRY = Frequency_COUNTRY,
                      Relative_Frequency_COUNTRY = Relative_Frequency_COUNTRY,
                      Frequency_COMPANY = Frequency_COMPANY,
                      Relative_Frequency_COMPANY = Relative_Frequency_COMPANY) # Get list of 4 variables above
Variable_Name <- names(Variable_List)

old_par <- par(mfrow = c(2, 2))
for (i in seq_along(Variable_List)){                  # Plot 4 variables using a for loop
  plotName <- paste("BarChart", Variable_Name[[i]], sep = "_") # Specify plot name

  print(plotName)                                     # for debugging only

  #png(file = plotName)                               # Create png file 
  barplot(Variable_List[[i]])                         # use barplot() to make graph
  #dev.off()                                          # Switch off dev
}
par(old_par)

Другие вопросы по теме