#r #dplyr #r-markdown
#r #dplyr #r-markdown
Вопрос:
похоже, в моем файле rmarkdown возникла проблема с вязанием этого конкретного фрагмента кода:
library(tidyverse)
df <- data.frame(female = c("Republican", "Republican", "Democrat", "Democrat"),
male = c("Republican", "Democrat", "Republican", "Democrat"),
n = c(100, 50, 50, 150))
xtabs(n ~ female male, df)
# male
# female Democrat Republican
# Democrat 150 50
# Republican 50 100
Я пытаюсь вычислить вероятность того, что представительница женского пола будет с представителем мужского пола, и наоборот. Итак, в этом примере это было бы (100/150), но я не знаю, как это сделать в отношении переменных.
Я пробовал это:
Fem <- colSums(df[ , "Republican", drop = FALSE] ) / sum(colSums(df))
Fem
Men <- rowSums(df["Republican", , drop = FALSE ] ) / sum(rowSums(df))
Men
Это отлично работает в коде и выдает вероятности, но отказывается компилироваться, когда я пытаюсь связать это с файлом md. В нем говорится:
Error in `[.default`(df, , "Republican", drop = FALSE) : subscript out of bounds
Calls: <Anonymous> ... colSums -> -> is.data.frame -> [ -> [.table -> NextMethod
In addition: Warning messages:
1: package 'tidyverse' was built under R version 3.5.2
2: package 'tidyr' was built under R version 3.5.2
3: package 'forcats' was built under R version 3.5.2
Execution Halted
Кто-нибудь может помочь мне расшифровать, где я напортачил? Спасибо!
Комментарии:
1.
df["Republican",]
работает только при наличии имен строк, данные вашего образца — нет. Вы имеете в видуdf[ df$female == "Republican",,drop=FALSE]
? (Работает ли этот код на консоли, независимо от rmarkdown? Я предлагаю при создании документов rmarkdown попробовать что-то на консоли, прежде чем пытаться автоматизировать и отобразить свой отчет.)2. Предоставленный мной код хорошо работает для меня на консоли :/ Он автоматически сгенерировал для меня имена строк. Ваше решение выдает мне эту ошибку: «Ошибка в df $ female: оператор $ недопустим для атомарных векторов»
3. Должен быть код, которым вы не делитесь, поскольку эта ошибка возникает, когда
df
не является фреймом. Вы случайно перезаписываете с помощьюdf <- xtabs(...)
? Это довольно важно. Более того,data.frame
такие имена строк не генерируются автоматически, и это единственное место, которое вы назначаетеdf
.)4. Я обещаю, что это весь код, который я использовал. И извините за tidyverse, я поместил его туда только потому, что знаю, что он загружен, и не знал, повлияет ли это на проблему.
5. Чего-то не хватает , в этом я уверен. Если вы начинаете новый сеанс R (не перезагружайте кэш! убедитесь, что среда пуста с
ls()
), затем введите свой код, как вы его представляете здесь , вы получите ошибки или предупреждения, отличные от вашего вопроса. Ваше утверждение имеет смысл (пока) только в том случае,df<-data.frame(...)
и затемdf<-xtabs(...,data=df)
. Кроме того, если это таблица, а не фрейм,df["Republican",,drop=F]
вы получаете республиканцев, а не мужчин (или женщин), поэтому ваша итоговая статистика неверно информирует.