我有实验室正在分析的数据,而且我是第一次尝试使用R.
我一直在阅读根据条件选择行,但我似乎无法找到为我的数据执行此操作的方法。
我创建了一个数据框,但我没有为列命名。每个柱子是我正在测试的细菌物种的特定变体,并且在约15小时的时间内其OD /吸光度值(每列总共56行)的增加值。
我想从EACH列中选择值为0.2到0.4的行。
理想情况下,我想要的是:
V1 V2
9 0.2100 7 0.2181
10 0.3017 8 0.3162
11 0.4079 9 0.4137
等
我想我可以从每列手动选择行,但必须有更快的方法。
然后,我计划计算子集中每列的平均值。非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
在这个例子中,你会得到一个列表,其中每个变量的值向量介于0.2到0.4之间。希望它有所帮助
df=data.frame(V1=c(1,0.3,2,.1,.5,8,.1,.4,.35,.22,6),V2=c(0.2,0.3,3,.15,.32,5,.1,.45,.35,.3,6))
filteredColumns<-sapply(df,function(x) x[x>0.2&x<0.4])
答案 1 :(得分:0)
这样做:
y
该函数将在向量x
中查找最接近z
的值,受限制set.seed(123)
df <- data.frame(x = rnorm(100), y = rnorm(100))
sapply(df, findNearest3, .3, c(.2, .4))
x y
[1,] 0.2533185 0.2982276
[2,] 0.3035286 0.3011534
[3,] 0.3317820 0.3104807
约束,并返回此值加上排序向量之前和之后的值。< / p>
示例:
sapply(df, function(x) mean(findNearest3(x, .3, c(.2, .4))))
现在用
x y
0.2962097 0.3032872
你会得到手段:
NA
请注意,如果给定约束z
中的值不足,则会返回df <- data.frame(x = c(.1, .23, .35, .5), y = c(.22, .24, .33, .48))
> sapply(df, findNearest3, .3, c(.2, .4))
x y
[1,] 0.23 0.24
[2,] 0.35 0.33
[3,] NA NA
> sapply(df, function(x) mean(findNearest3(x, .3, c(.2, .4)), na.rm = T))
x y
0.290 0.285
:
findNearest3.pos <- function(x, y){
temp <- sort(x)
point <- which(abs(temp-y)==min(abs(temp-y)))
return(c(point-1, point, point+1))
}
编辑:要返回值的行位置而不是值本身,只需更改代码的最后一行:
myrows <- lapply(df, findNearest3.pos, y = .3)
应用: 要在相同维度的另一个数据框上使用它,首先要将位置保存在列表中:
set.seed(234)
df1 <- data.frame(x = rnorm(100), y = rnorm(100))
newsubset <- mapply(function(x, y) x[y], df1, myrows)
x y
[1,] -0.9581388 2.214151
[2,] 0.6280635 0.455070
[3,] 0.6625872 0.513053
然后将第二个数据框子集化:
set.seed(345)
df2 <- data.frame(x = rnorm(100))
考虑到只有一列的其他数据框,您需要确定要使用哪一列的行位置。
V1
您可以访问x
(或在此示例中为df2[myrows[[1]],]
[1] 0.2986353 -0.9917691 -0.6510206
)中找到的行位置:
V2
以及y
(此处命名为df2[myrows[[2]],]
[1] -0.3148442 -0.2491949 0.6854260
)中包含的内容:
{{1}}