Сочетать стоимость как колонну dataframe в R

Он хотел смочь сочетать стоимость, которые есть в колоннах Oak, Wasteland, Edge и Crop тех Taxa что равны, такого dataframe как этот:

  View(Datos)

      Taxa                Oak    Wasteland    Edge   Crop
       Allium               0        0         15.9     0
       Allium               0        0           0   10.8
       Cucumis              0        0        15.9     0
       Cucumis              0      12.4          0      0
       Zea_mays             0      12.4          0      0
       Quercus_ilex        6.5       0           0      0
       Quercus_coccifera    0      12.4         0      0


       Taxa                Oak    Wasteland    Edge   Crop
       Allium               0        0         15.9   10.8
       Cucumis              0      12.4        15.9     0
       Zea_mays             0      12.4          0      0
       Quercus_ilex        6.5       0           0      0
       Quercus_coccifera    0      12.4         0      0

С какой функцией он мог бы снимать дубликаты и как?

1
задан 01.02.2018, 19:31
2 ответа

Существуют несколько форм:

Datos[!duplicated(Datos)]

Или используя ее funciГіn unique

unique(Datos)

Или устанавливая ее librerГ - в dplyr

# Instalación 
install.packages("dplyr") 
# Carga
library("dplyr")
# Función 
distinct(Datos)

, Чтобы группировать колонны из-за operaciГіn (sum, max, они мочатся...)

aggregate(cbind(Datos$Oak,Datos$Wasteland,Datos$Edge,Datos$Crop), by = list(Datos$Taxa), max)

или

aggregate(cbind(Oak,Wasteland,Edge,Crop) ~ Taxa, data = Datos, max)

или

aggregate(Datos[,2:5],by=list(Datos$Taxa), max)

или с dplyr

require(dplyr)
Datos %>% group_by(Taxa) %>% summarise_each(funs(max))

или с data.table

library(data.table)
DT <- data.table(Datos)
DT[, lapply(.SD, max), by=Taxa]
2
ответ дан 24.11.2019, 03:08
  • 1
    большое спасибо, хотя я не выставил хорошо мой вопрос, querí чтобы сочетать те taxas, которые равны объединяя стоимость колонн правой стороны – Adrián P.L. 08.01.2018, 17:57
  • 2
    Ох я вижу, Обновите мой ответ с несколькими выборами tambié n я надеюсь, что функционирует какая-то! – virtualdvid 08.01.2018, 18:51
  • 3
    SIII - это, я использовал эту funció n, который ты принес мне заблаговременно: DatosSSD<-aggregate (cbind (Oak, Wasteland, Edge, Crop) ~ Taxa, дата = DatosSD, max) Большое спасибо – Adrián P.L. 08.01.2018, 19:12

SegГєn твой пример, в случае Allium ты считаешь два реестра слегка отличными (в действительности они не удвоены), и из-за результата, который ты ждешь, казалось, что ты нуждаешься в группировании с нею funciГіn max.

txt <- "Taxa   Oak    Wasteland    Edge   Crop
Allium               0        0         15.9     0
Allium               0        0         15.9   10.8
Cucumis              0      12.4        15.9     0
Cucumis              0      12.4          0      0
Zea_mays             0      12.4          0      0
Quercus_ilex        6.5       0           0      0
Quercus_ilex        6.5       0           0      0
Quercus_coccifera   6.5      12.4         0      0"

aggregate(cbind(Oak,Wasteland,Edge,Crop) ~ Taxa, df, max)

Вывод:

               Taxa Oak Wasteland Edge Crop
1            Allium 0.0       0.0 15.9 10.8
2           Cucumis 0.0      12.4 15.9  0.0
3 Quercus_coccifera 6.5      12.4  0.0  0.0
4      Quercus_ilex 6.5       0.0  0.0  0.0
5          Zea_mays 0.0      12.4  0.0  0.0
  • С aggregate() мы делаем группирование используя синтаксис aggregate(formula, data, funcion)
  • С cbind создаем колонны, группируемые для каждых Taxa
2
ответ дан 24.11.2019, 03:08
  • 1
    Ты имеешь razó n, я совершил опечатку, поместив пример (уже я это исправил). Aú n así меня отпускает эта ошибка " Ошибка in terms.formula (он формулирует, датирует = дату): ' data' argument is of the wrong type" ¿ В qué смоги проистекать? Приветствие и спасибо заранее – Adrián P.L. 08.01.2018, 18:23
  • 2
    @Adriá nP.L.: Проверь, что data был действительно data.frame clá sico, funció n aggregate требует, чтобы он это был, а пробует castearlo раньше посредством as.data.frame(data) – Patricio Moracho 08.01.2018, 19:02