如何更改奇数位置的元素?

时间:2018-04-29 03:17:13

标签: r

My table looks similar to this我有一个包含15行和6列的表格。我们说我的第6列是患者的血糖;我希望将奇数位置上的所有元素乘以5并保持其余不变(仅适用于该特定列)。我怎样才能做到这一点?

如果在奇数位置,那么血糖* 5 .....如果在偶数位置则保持不变

谢谢

4 个答案:

答案 0 :(得分:1)

我们可以使用%%创建一个逻辑索引,其中奇数为TRUE,偶数位置为FALSE。然后根据它对第6列行进行子集化,并通过乘以5

来指定修改后的值
i1 <- as.logical(seq_len(nrow(df1)) %% 2)
df1[[6]][i1] <- df1[[6]][i1] * 5

答案 1 :(得分:0)

假设我的数据是data,我首先会创建一个向量来存储PatientProfile数据帧中所有奇数行的索引:

odd_ind <-seq(1,nrow(PatientProfile),2)
odd_ind
# returns: 1   3   5   7   9  11  13  15

然后在odd_ind中为行设置子集,并在这些符合条件的行中将5乘以value的值:

PatientProfile[odd_ind, "BloodSugar"] <- PatientProfile[odd_ind, "BloodSugar"] *5

答案 2 :(得分:0)

df<-data.frame('x'=rnorm(15),
               'y'=rnorm(15))

## tag odd row position 

df$odd.row<-as.numeric(row.names(df))%%2

## change the column, say x, base on odd.row
df$x.changed<-ifelse(df$odd.row ==1, df$x*5, df$x)

希望这可以解决您的问题,可能有更好的方法来做到这一点,更优雅和有效,其他人可能知道如何做到这一点。顺便说一下,每当遇到问题时,在发布问题之前搜索答案,如果完整的搜索没有帮助你,请提供最小的可重复示例。

答案 3 :(得分:0)

您可以使用seq来索引每隔一行:

# dummy data
df <-data.frame("x" = LETTERS[1:10], "h" = sample(c("M", "F"), replace = T, size = 10), "y" = sample(seq(1, 3, 1), replace = T, size = 10))


# index odd rows using seq
df[seq(1, length(df[,1]), 2), 3] <- df[seq(1, length(df[,1]), 2), 3] * 5

您已经评论过询问是否可以使用for循环或ifelse语句,是的,您可以(虽然我不确定您为什么会这样做):

# for loop
for(i in seq(1, length(df[,1]), 2)){
  df[i,3] <- 5 * df[i,3]
}

# ifelse
library("gtools")
df[,3] <- ifelse(odd(as.numeric(rownames(df))), 5 * df[,3], df[,3])