R-根据列指定的值更改行值

时间:2014-11-13 18:14:29

标签: r loops for-loop

我有下面的数据集(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
         }

如果有人能指出我做错了什么,我真的很感激。

2 个答案:

答案 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
}