My table looks similar to this我有一个包含15行和6列的表格。我们说我的第6列是患者的血糖;我希望将奇数位置上的所有元素乘以5并保持其余不变(仅适用于该特定列)。我怎样才能做到这一点?
如果在奇数位置,那么血糖* 5 .....如果在偶数位置则保持不变
谢谢
答案 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])