在分离的集合内应用相同的方程式

时间:2019-03-26 16:41:35

标签: r loops nested

我需要在由“ 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 个答案:

答案 0 :(得分:1)

对于所提供的示例,这将为您提供所需的内容:

library(dplyr)

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

tab

如果您不总是寻找均值,则可以用summarize中的其他函数代替。

答案 1 :(得分:0)

按ID拆分data.frame,然后返回colMeans。

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