Не могли бы вы сказать мне, как я мог бы превратить кадр данных, как это:Слияния data.frame строк с общим столбцом значения
tg qr loc a1 a2 a3 b1 b2 b3 c1 c2 c3
1 A 1 89 NA NA NA 1 2 3 1 2 3
2 A 1 61 1 2 3 NA NA NA 1 2 3
3 A 2 38 4 5 6 NA NA NA NA NA NA
4 B 1 40 4 5 6 NA NA NA NA NA NA
5 B 1 3 NA NA NA NA NA NA 4 5 6
в это:
tg qr loc a1 a2 a3 b1 b2 b3 c1 c2 c3
1 A 1 15 1 2 3 1 2 3 1 2 3
2 A 2 95 4 5 6 NA NA NA NA NA NA
3 B 1 42 4 5 6 NA NA NA 4 5 6
Функция должно:
- объединить все строки с одинаковыми значениями в столбцах 'tg' AND 'qr' в одну строку
- при слиянии, замените все «NA» на существующие значения - никогда в обратном направлении
- Часто бывают случаи, когда переменная присутствует в обеих строках, которые объединены, но ее значение всегда будет равно (тогда это не будет " т материя, из какой строки это будет принято)
- значения столбцов «LOC» различается, но не имеет значения, столбец может быть даже удален
код для этих образцов dataframes является:
df = rbind(c("A","1",floor(runif(1,1,100)),c(NA,NA,NA),c(1,2,3),c(1,2,3)),
c("A","1",floor(runif(1,1,100)),c(1,2,3),c(NA,NA,NA),c(1,2,3)),
c("A","2",floor(runif(1,1,100)),c(4,5,6),c(NA,NA,NA),c(NA,NA,NA)),
c("B","1",floor(runif(1,1,100)),c(4,5,6),c(NA,NA,NA),c(NA,NA,NA)),
c("B","1",floor(runif(1,1,100)),c(NA,NA,NA),c(NA,NA,NA),c(4,5,6)))
df = as.data.frame(df)
colnames(df) = c("target","query","loc",c("a1","a2","a3"),c("b1","b2","b3"),c("c1","c2","c3"))
df2 = rbind(c("A","1",floor(runif(1,1,100)),c(1,2,3),c(1,2,3),c(1,2,3)),
c("A","2",floor(runif(1,1,100)),c(4,5,6),c(NA,NA,NA),c(NA,NA,NA)),
c("B","1",floor(runif(1,1,100)),c(4,5,6),c(NA,NA,NA),c(4,5,6)))
df2 = as.data.frame(df2)
colnames(df2) = c("target","query","loc",c("a1","a2","a3"),c("b1","b2","b3"),c("c1","c2","c3"))
Благодарим вас за поддержку.
[Что вы пробовали] (http://mattgemmell.com/2008/12/08/what-have-you -tried /) до сих пор? – zero323
'merge (df, df2, by = c (" target "," query "))'? – Metrics
@Metrics Не совсем. У меня нет 'df2'. Я разместил его как образец, который я бы хотел получить. – mjktfw