Настройка области построения для текстовых данных с использованием фиктивного фрейма данных - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть большое количество наборов данных с высказываниями, различающимися по количеству слов, которые они содержат (высказывания из 4 слов, высказывания из 5 слов и т. Д.). Каждый набор данных состоит из выборки ровно 1000 токенов высказывания и хранится во фрейме данных с 3 переменными: слова («слово»), их грамматические теги («с5») и их положение в повороте («слот»). ):

df <- data.frame(word, c5, slot)

То, что я хотел бы сделать, - это нанести на график разброс определенных слов в их высказываниях в точечном графике, используя функцию text () и цветовые кодировки, например, черный для междометий и серый для любого другого типа слов. Чтобы настроить область построения, я создаю фиктивную рамку с двумя переменными: строками (для слов в высказывании) и слотами (для позиции каждого слова в высказывании). Например, для выборки из 10 слов:

dummy <- data.frame(rows = 1:1000, slots = 1:10)

Затем я установил область построения для этого фрейма данных, таким образом:

plot(dummy$rows ~ dummy$slots, type="n", axes =F)
axis(1, at=seq(1:10), labels=c("w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10"))

и заполните слоты данными в приведенном выше кадре данных "df":

for(i in unique(df$slot)){
  text(i, 1:1000, "_____", cex=1.45,
       col = ifelse(df[df$slot==i,]$c5=="ITJ", "black", "grey"))
}

Это прекрасно работает, если строки в фиктивном фрейме данных кратны слотам. Проблема начинается, когда их нет, например, в случае высказываний из 7 слов, я получаю эту ошибку:

dummy <-data.frame(rows = 1:1000, slots = 1:7)
Error in data.frame(rows = 1:1000, slots = 1:7) : 
arguments imply differing number of rows: 1000, 7

Есть ли способ установить фиктивный фрейм данных для графика, несмотря на несоответствие между строками и слотами?

1 Ответ

0 голосов
/ 05 ноября 2018

Вы должны быть более осмотрительны в выборе размера вашего фиктивного набора данных. Тысяча не кратна семи, поэтому вы получаете ошибку. Посмотрите на пример ниже. В этом примере перед созданием набора данных определяется, каким должен быть первый вектор большого размера.

# Settings
slotSize <- 7
desiredRows <- 1000

# Compute nr of repeats
nrRepeats <- round(desiredRows / slotSize, 0)
totalRows <- nrRepeats * slotSize

# Create dummy data
dummy <-data.frame(rows = 1:totalRows, slots = 1:slotSize)
head(dummy); tail(dummy)

Это также может быть сделано в одной строке, хотя это может быть сложнее для чтения.

# In one line
dummy <-data.frame(rows = c(1:(round((1000/slotSize),0) * slotSize)), slots = 1:slotSize)

Надеюсь, это приблизит вас к решению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...