我有下面的数据集(df)。 “Num”列表示每行中需要将其值更改为5的列数。
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Num
0 1 1 1 1 0 0 3
0 0 1 1 1 1 1 3
0 0 0 1 1 1 0 2
0 0 0 1 0 1 0 5
1 1 1 1 1 1 1 6
我的结果数据集如下所示:
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Num
5 5 5 1 1 0 0 3
5 5 5 1 1 1 1 3
5 5 0 1 1 1 0 2
5 5 5 5 5 1 0 5
5 5 5 5 5 5 1 6
我使用了以下命令,但它只根据列的第一行更改值。
for (i in 1:length (df$Num)){
df[,1:i]=5
}
如果有人能指出我做错了什么,我真的很感激。
答案 0 :(得分:4)
尝试
df[cbind(rep(1:nrow(df), df$Num), sequence(df$Num))] <- 5
df
# Col1 Col2 Col3 Col4 Col5 Col6 Col7 Num
#1 5 5 5 1 1 0 0 3
#2 5 5 5 1 1 1 1 3
#3 5 5 0 1 1 1 0 2
#4 5 5 5 5 5 1 0 5
#5 5 5 5 5 5 5 1 6
df <- structure(list(Col1 = c(0L, 0L, 0L, 0L, 1L), Col2 = c(1L, 0L,
0L, 0L, 1L), Col3 = c(1L, 1L, 0L, 0L, 1L), Col4 = c(1L, 1L, 1L,
1L, 1L), Col5 = c(1L, 1L, 1L, 0L, 1L), Col6 = c(0L, 1L, 1L, 1L,
1L), Col7 = c(0L, 1L, 0L, 0L, 1L), Num = c(3L, 3L, 2L, 5L, 6L
)), .Names = c("Col1", "Col2", "Col3", "Col4", "Col5", "Col6",
"Col7", "Num"), class = "data.frame", row.names = c(NA, -5L))
答案 1 :(得分:1)
如果你想要for-loop解决方案,那就是
for (i in 1:length (df$Num)){
df[i,1:df$Num[i]]=5
}