Использование grep в tapply () - функция для сопоставления строк во фрейме данных в R - PullRequest
0 голосов
/ 23 июня 2018

У меня есть фрейм данных, состоящий из 36 наблюдений 8 переменных (первые две переменные являются факторами, а последние 6 числовыми). Структура выглядит так:

Technology     Sector 2011 2012 2013 2014 2015 mean
Photovoltaic   Energy  10   20   30   10   30   20             
Wind-based     Energy  20   60   60   20   40   40  
Cultivation    Nature  10   10   20   30   30   20

Я хочу получить среднее значение для каждой технологии, в названии которой есть строка «based». Я сделал это так:

df[[8]][c(grep("based",Technology))]

И это работает именно так, как и должно быть. Задача моего онлайн-курса состоит в том, чтобы сделать это также с помощью одной из следующих функций: apply () -, lapply () -, sapply () - или tapply () -. Как это можно сделать?

1 Ответ

0 голосов
/ 23 июня 2018

Я не думаю, что tapply является подходящим вариантом, потому что OP хочет просто получить подмножество.Теперь, если необходимо использовать apply/lapply/sapply..., тогда опция может быть такой:

df$mean[mapply(function(x)grepl("based", x), df$Technology)]
#[1] 40

df$mean[sapply(df$Technology,function(x)grepl("based", x))]
#[1] 40

Данные:

df <- read.table(text=  
"Technology     Sector 2011 2012 2013 2014 2015 mean
Photovoltaic   Energy  10   20   30   10   30   20             
Wind-based     Energy  20   60   60   20   40   40  
Cultivation    Nature  10   10   20   30   30   20",
header = TRUE, stringsAsFactors = FALSE)
...