我尝试编写一个函数,用相同的值除以2来替换向量中的值.
# replacement function for a vector
rep <- function(x)
x.half <- {abs(replace(x, which(x<0),x/2))}
Run Code Online (Sandbox Code Playgroud)
但是,我知道这个函数不能正常工作,因为如果我模拟一个带有负数和正数的向量,我会得到错误的结果:
a <- c(1,-1,2,-2,3,-3,4,-4,5,-5,11,-11,12,-12,13,-13,21,-21,25,-25)
a.rep <- rep(a)
# data frame to test
test <- cbind(a,a.rep)
Run Code Online (Sandbox Code Playgroud)
此外,当我将此函数应用于向量a时,我收到如下警告消息:
警告消息:替换(x,其中(x <0),x/2):要替换的项目数不是替换长度的倍数
显然,我的功能有问题.
我需要从组内的每个观察中减去按组计算的平均值。其中具有挑战性的部分是我在数据框中有一个子分组,或两个级别:V5 和 V4。这是我的 data.frame 结构的示例:
B = as.data.frame(matrix(
c(2,2,3,3,4,3,1,5,7,6,4,5,8,9,2,3,8,4,5,0,7,5,6,7,5,3,2,
"A","A","A","A","B","B","C","C","C",
"TRUE","TRUE","TRUE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE"),
nrow=9,ncol=5))
Run Code Online (Sandbox Code Playgroud)
所以我的 data.frameB看起来像这样:
V1 V2 V3 V4 V5
1 2 6 5 A TRUE
2 2 4 0 A TRUE
3 3 5 7 A TRUE
4 3 8 5 A TRUE
5 4 9 6 B FALSE
6 3 2 7 B FALSE
7 1 3 5 C FALSE
8 5 8 3 C FALSE
9 7 4 2 C FALSE
Run Code Online (Sandbox Code Playgroud)
因此,如果我按 V5 和 V4 求平均值,我会得到一个新的 …
我感兴趣的是编写一个程序,该程序给出向量中元素的数量,这些元素的数量x小于或等于向量中的任何给定值x.
让我们说吧
x = [1,3,8,7,6,4,3,10,12]
我想计算内的元件的数量x,其是小于或等于1,至3〜8等.例如第五元素x[5]是6和元素小于或等于的数6等于5.但是,我只知道如何进行元素比较,例如x[1]<=x[3]
我想我将使用for循环并在这里有类似的东西:
for (i in length(x)){
if (x[i]<=x[i]){
print(x[i])}
# count number of TRUEs
}
Run Code Online (Sandbox Code Playgroud)
但是,这段代码显然不符合我的要求.