Р: Как прочитать столбец, найти значение и вычислить что-то в другом столбце на основе этого поиска? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть база данных с 2000 значениями, и она выглядит следующим образом:

Status     Job          Hours  Salary
Permanent  Programmer   40      45k
Permanent  Analyst      35      50k
Temporary  Programmer   35      47k
Permanent  Programmer   40      47k
Temporary  Technician   35      50k
.
.
.

Я хочу сделать с этой базой разные вещи, не могли бы вы, ребята, помочь мне, пожалуйста?

1 : Мне нужно вычислить, сколько программистов являются постоянными . И рассчитать%. Я использовал этот код, но он не работал (он рассчитывает только первые 200 сотрудников, а не 2000). Кроме того, я не знаю, как использовать результат для вычисления%: (

filter(database, Job == "Programmer" & Status == "Permanent")

2: я считаю, что это проще, но я тоже не понимаю ... Мне нужно вычислить среднее значение (часы) всех аналитиков . Я пробовал это, но это не сработало:

if(Job == "Analyst"){mean(Hours)}

3: мне нужно использовать образец для этого Я знаю это, но это не работает слишком хахаха (трудно начать с R нет? Или это только я?). Мне нужно выбрать 50 сотрудников и повторить этот процесс 1000 раз. Цель - рассчитать доверительный интервал с 90%. Я попробовал это:

x <- 1
if(x != 1000){sample(database, 50)}

Но это не работает ахаха, и для части доверительного интервала я не запустил это.

Из-за классов расстояния, моему учителю трудно помочь нам, поэтому нам нужно найти ответы в одиночку. И вся документация, которую он нам дал, это дистрибутивы (стандартные, пуассоновские, геометрические ...) и графика (поистине, boxplot ...).

Большое спасибо всем вам :) Хорошего дня!

Ответы [ 3 ]

0 голосов
/ 24 марта 2020

Я думаю, это то, что вы описываете, не уверен. Надеюсь, это так.

#Used mtcars as an example

df1 <- mtcars
set.seed(100)
v <- data.frame(data= 1, nrow = 1000, ncol = 50)
a <- matrix(data = 1, nrow = 50)
b <- matrix(data = 1, nrow = 50)

for(i in 1:1000){
  v[i, ] <- sample(df1, size = 50, replace = TRUE)
  a[i] <- sd(v[i, ])
  b[i] <- mean(v[i, ])
}

error <- qnorm(0.95)*a/sqrt(1000)
right <- matrix(data = 1, nrow = 50)
left <- matrix(data = 1, nrow = 50)

for(i in 1:1000){
  right[i] <- b[i]-error[i]
  left[i] <- b[i]+error[i]
}

0 голосов
/ 25 марта 2020

Это весь мой код, повторяющий вашу проблему, посмотрите, поможет ли это:

Status <- c("Permanent", "Permanent", "Temporary", "Permanent", "Temporary")
Job <- c("Programmer", "Analyst", "Programmer", "Programmer", "Technician")
Hours <- c(40, 35, 35, 40, 35)
Salary <- c(45, 50, 47, 47, 50)

df <- cbind(Status, Job, Hours, Salary)

df <- as.data.frame(df)
df$Hours <- as.numeric(as.character(df$Hours))
df$Salary <- as.numeric(as.character(df$Salary))

by_job <- df %>%
  filter(Job == "Programmer" & Status == "Permanent") %>%
  summarise(cnt = n())

means_df <- df %>%
  select(Job, Salary) %>%
  filter(Job %in% "Programmer") %>%
  summarise(m = mean(Salary))
0 голосов
/ 24 марта 2020

Вот ответ на первые два вопроса. Предполагая, что ваши столбцы «Часы» и «Зарплата» имеют цифры c, а 45k - это не символ, а фактически 45000.

Что касается вашего последнего вопроса, можете ли вы уточнить, нужно ли проводить перекрестную проверку? Вот почему вам нужны образцы?

#Q1
by_job <- df %>%
  filter(Job == "Programmer" & Status == "Permanent") %>%
  summarise(cnt = n())
#Q2
means_df <- df %>%
  select(Job, Salary) %>%
  filter(Job %in% "Analyst") %>%
  summarise(m = mean(Salary))

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