4

这可能是一个简单的问题,但我希望有人能指出我正确的方向。我有一个示例数据集:

dfrm <- list(L = c("A","B","P","C","D","E","P","F"), J=c(2,2,1,2,2,2,1,2), K=c(4,3,10,16,21,3,17,2))
 dfrm <-as.data.frame(dfrm)
 dfrm
  L J  K
1 A 2  4
2 B 2  3
3 P 1 10
4 C 2 16
5 D 2 21
6 E 2  3
7 P 1 17
8 F 2  2

J 列指定了在 K 中定义的变量的类型。我希望能够取 K 值旁边分配有 1 的平均值。在此示例中,它将是 10 和 17

T = c(10,17)
mean(T)
13.5

接下来,我希望能够分配通过/失败等级,其中通过 = 1,失败 = 0 来确定 K 列中的数字是否大于平均值。

最终数据集应如下所示:

cdfrm <- list(L = c("A","B","P","C","D","E","P","F"), J=c(2,2,1,2,2,2,1,2), K=c(4,3,10,16,21,3,17,2),C = c(0,0,0,1,1,0,1,0))
cdfrm <-as.data.frame(cdfrm)
 cdfrm
  L J  K C
1 A 2  4 0
2 B 2  3 0
3 P 1 10 0
4 C 2 16 1
5 D 2 21 1
6 E 2  3 0
7 P 1 17 1
8 F 2  2 0

这似乎很基本,对不起,伙计们,我只是不知道我在想什么。

4

2 回答 2

2

解决方案有两个步骤。首先是计算您感兴趣的值的平均值。换句话说,取 data.frame 中值子集的平均值。R 有一个方便的函数来计算子集,称为subset. 这是在行动:

meanK <- mean(subset(dfrm, subset=J==1, select=K))
meanK
K 
13.5 

接下来,您要将数据框中的 K 列与我们刚刚计算的平均值进行比较。这是一个简单的向量比较:

dfrm$Pass <- dfrm$K>meanK
dfrm
L J  K  Pass
1 A 2  4 FALSE
2 B 2  3 FALSE
3 P 1 10 FALSE
4 C 2 16  TRUE
5 D 2 21  TRUE
6 E 2  3 FALSE
7 P 1 17  TRUE
8 F 2  2 FALSE
于 2011-07-22T08:44:47.403 回答
0

以下是如何在一行中做到这一点

transform(dfrm, C = K > sapply(split(dfrm$K, dfrm$J), mean)[J])

splitK根据 的值对 的值进行分组Jsapply(..., mean)计算分组平均值。

于 2011-07-22T11:41:53.863 回答