/ / Weź średnią dla wyników zduplikowanych wpisów i konwertuj w formacie szerokim - r, ramka danych, agregacja, średnia, zmiana kształtu

Weź średnią dla zduplikowanych wpisów i przelicz w szerokim formacie - r, ramka danych, agregat, średnia, zmień kształt

Chcę zmienić dane w formacie szerokim, ale chcę wziąć średnią z trzeciej kolumny związanej z wpisami czwartej kolumny. Lubić (0.21+0.05+0.06)/total. Przeczytałem o reshape pakiet w języku R, ale nie wiem, której funkcji agregującej użyć, która znajdzie średnią przed konwersją do formatu szerokiego

Wprowadź ramkę danych

CID100000085    C0000737      0.21        Abdominal pain
CID100000085    C0000737      0.21        Gastrointestinal pain
CID100000085    C0000737      0.05        Abdominal pain
CID100000085    C0000737      0.05        Gastrointestinal pain
CID100000085    C0000737      0.06        Abdominal pain
CID100000085    C0000737      0.06        Gastrointestinal pain

Pożądane wyjście

                                Abdominal pain   Gastrointestinal pain
CID100000085    C0000737     0.0166           0.0166

Odpowiedzi:

3 dla odpowiedzi № 1

Możemy po prostu użyć dcast

library(data.table)
dcast(setDT(df1), id1+id2~pain, value.var = "value", mean)
#            id1      id2 Abdominal pain Gastrointestinal pain
#1: CID100000085 C0000737      0.1066667             0.1066667

dane

df1 <- structure(list(id1 = c("CID100000085", "CID100000085", "CID100000085",
"CID100000085", "CID100000085", "CID100000085"), id2 = c("C0000737",
"C0000737", "C0000737", "C0000737", "C0000737", "C0000737"),
value = c(0.21, 0.21, 0.05, 0.05, 0.06, 0.06), pain = c("Abdominal pain",
"Gastrointestinal pain", "Abdominal pain", "Gastrointestinal pain",
"Abdominal pain", "Gastrointestinal pain")),
.Names = c("id1",
"id2", "value", "pain"), class = "data.frame", row.names = c(NA,
-6L))

2 dla odpowiedzi nr 2

Możesz spróbować aggregate razem z reshape w bazie R:

reshape(aggregate(V3~V1+V2+V4, df, mean),
idvar = "V1", timevar = "V4", direction = "wide")[,-4]

#            V1 V2.Abdominalpain V3.Abdominalpain V3.Gastrointestinalpain
#1 CID100000085         C0000737        0.1066667               0.1066667

Dane

df <- structure(list(V1 = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "CID100000085", class = "factor"),
V2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "C0000737", class = "factor"),
V3 = c(0.21, 0.21, 0.05, 0.05, 0.06, 0.06), V4 = structure(c(1L,
2L, 1L, 2L, 1L, 2L), .Label = c("Abdominalpain", "Gastrointestinalpain"
), class = "factor")), .Names = c("V1", "V2", "V3", "V4"), class = "data.frame", row.names = c(NA,
-6L))