Найдите значение в кадре данных R на основе других значений столбца - PullRequest
0 голосов
/ 17 января 2020

У меня есть кадр данных в R

data.frame(age = 18,19,29,
     rate = 1.2,4.5,6.8
     sex = "male","female","male")

Я хотел бы получить показатель, связанный со значениями age = 18 и sex = male. Есть ли способ, которым я могу индексировать с этими значениями и быть в состоянии сделать это с любой парой значений возраста и пола.

Я могу сделать это в dpylr, используя команды filter и select, но это слишком медленно для того, что я пытаюсь сделать

Ответы [ 3 ]

2 голосов
/ 17 января 2020

при условии, что df является вашим фреймом данных:

df[(df$age == 18 & df$sex == 'male'),]
1 голос
/ 17 января 2020

ваш пример data.frame не работает должным образом, вот один;) сначала вы можете поместить данные в подмножество, а затем вычислить, сколько строк у вас в этом подмножестве по сравнению с основным набором.

df <- data.frame(age = c(18,19,29),
           rate = c(1.2,4.5,6.8),
           sex = c("male","female","male"),
           stringsAsFactors = F)
df_sub <- subset(df, age==18 & sex %in% "male")
df_rate <- nrow(df_sub)/nrow(df)

Хотя если вы говорите, что filter и select слишком медленные, вы можете преобразовать ваш data.frame в data.table, обычно он быстрее, чем data.frames.

library(data.table)    
dt <- as.data.table(df)
nrow(dt[age==18 & sex %in% "male"])/nrow(dt)

# or more data.table-like:

dt[age==18 & sex %in% "male", .N] / dt[,.N]
1 голос
/ 17 января 2020

В качестве альтернативы вы можете использовать subset.

Предполагается, что ваш фрейм данных называется df:

df1 <- subset(df,df$age==18 & df$sex=='male')

А затем

View(df1)
...