Примените то же уравнение внутри отдельных множеств - PullRequest
0 голосов
/ 26 марта 2019

Мне нужно использовать ту же функцию внутри набора данных, разделенных "ID" например:

a <- rnorm (12,50,5)
b <- rnorm (12,50,5)
c <- c(1,1,1,2,2,2,3,3,3,4,4,4)
w <- data.frame (cbind(a,b,c))
colnames (w) <- c("X","Y","ID")

получилось как:

      X        Y     ID
1  58.60074 49.50746  1
2  48.58635 41.67082  1
3  52.15529 48.06197  1
4  43.90611 61.65534  2
5  49.98929 57.84950  2
6  43.17375 49.44611  2
7  48.87200 46.63762  3
8  48.70081 54.89588  3
9  48.80352 52.82323  3
10 60.25107 48.05426  4
11 47.90206 55.46229  4
12 41.61667 50.24669  4

установить ID = 1, установить ID = 2, установить ID = 3, установить ID = 4. Как применять одну и ту же функцию для каждого набора отдельно и автоматически. Спасибо

Майку: X и Y - географические координаты, и мне нужно использовать уравнение для всех строк внутри набора вместе, чтобы получить новую координату.

до MrFlick: центр точек в наборе ID = 1 пример:

x_1 <- mean (w[1:3,1])
y_1 <- mean (w[1:3,2])

получилось как:

> x_1
[1] 53.11413
> y_1
[1] 46.41341

или в наборе ID = 2

x_2 <- mean (w[4:6,1])
y_2 <- mean (w[4:6,2])

получилось как:

> x_2
[1] 45.68972
> y_2
[1] 56.31698

в Julian_Hn: это работает отлично. Спасибо

Ответы [ 2 ]

1 голос
/ 26 марта 2019

В приведенном примере это дает вам то, что вы хотите:

library(dplyr)

tab <- w %>%
  group_by(ID) %>%
  summarize(mean.x=mean(X), mean.y=mean(Y))

tab

Если вы не всегда ищете среднее значение, вы можете заменить другие функции в summarize.

0 голосов
/ 26 марта 2019

Разделите data.frame по идентификатору, а затем верните colMeans.

spl <- split.data.frame(w,f=w$ID)
mean_df <- t(sapply(spl,colMeans))
...