我正试着在R.
我有一个数据集,它有两个列,名为Diet和Bodyweight。行1:12是控件的观测结果,我想得到控件组的Bodyweight列的平均值。
所以我用这个:mean(dat[1:12,2])
然后,我想知道有多少非控制观察(第13:24行)比控制观察的平均值(第1:12行)少。
所以我用了这个:dat[dat[13:24,2] < mean(dat[1:12,2]), ]
这给了我这个
Diet Bodyweight
3 chow 24.04
10 chow 20.10
12 chow 26.25
15 hf 22.80
22 hf 21.90
24 hf 20.73但我希望它返回这样的内容,其中不包括第1:12行:
Diet Bodyweight
15 hf 22.80
22 hf 21.90
24 hf 20.73我怎样才能做到这一点?
*编辑: dput()结果:
> dput(dat)
structure(list(Diet = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L), .Label = c("chow", "hf"), class = "factor"), Bodyweight = c(21.51,
28.14, 24.04, 23.45, 23.68, 19.79, 28.4, 20.98, 22.51, 20.1,
26.91, 26.25, 25.71, 26.37, 22.8, 25.34, 24.97, 28.14, 29.58,
30.92, 34.02, 21.9, 31.53, 20.73)), .Names = c("Diet", "Bodyweight"
), class = "data.frame", row.names = c(NA, -24L))发布于 2015-01-27 01:40:12
分两步做。首先获取目标行,然后应用逻辑选择:
> dat[ 13:24, ][dat[13:24,2] < mean(dat[1:12,2]), ]
Diet Bodyweight
15 hf 22.80
22 hf 21.90
24 hf 20.73你可以把呼叫串在一起。对"[“的第二个调用只是选择具有12项逻辑向量的行,但是由于它是从同一组值创建的,所以它是”同步的“。
发布于 2015-01-27 01:44:12
如果您不知道行号,也可以使用名称和值。
df[with(df, Diet == "hf" & Bodyweight < mean(Bodyweight[Diet == "chow"])), ]
# Diet Bodyweight
# 15 hf 22.80
# 22 hf 21.90
# 24 hf 20.73发布于 2015-01-27 01:37:22
如果您不知道行号,也不知道其他测试变量的名称(在这种情况下,您有比“hf”更多的测试变量),但是知道"chow“饮食是您的控制,您可以这样做:
library(dplyr)
df %>% filter(Diet != "chow", Bodyweight < mean(Bodyweight[Diet == "chow"]))返回:
# Diet Bodyweight
#1 hf 22.80
#2 hf 21.90
#3 hf 20.73https://stackoverflow.com/questions/28161705
复制相似问题