r - 我想添加数据框的递增连续列

标签 r

我有一个包含 20 列的数据框。我想先计算前两列的总和,然后计算接下来的三列并继续添加,直到我得到所有 20 列的总和。 DataFrame 只有 0 和 1。如果 k 列的总和超过五,我想将剩余列的值更改为 0。我无法创建循环来执行相同的操作

0 0 0 1 1 0 1 1 1 0 0 0 0 1 0 0
0 1 1 0 0 0 0 0 1 1 0 0 0 0 1 0
1 0 1 0 0 0 1 1 1 0 0 0 0 1 0 1
0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0
0 1 0 1 0 1 0 0 0 0 0 0 0 1 1 0

例如,在第一行中,因为我们在第 9 列中获得了 sum=5,我想将剩余的值更改为 0,即倒数第三个值更改为 0。

最佳答案

编辑:Base R 解决方案

df <- as.data.frame(dt)


tdf <- data.frame(t(df))

tdf$X1[cumsum(tdf$X1)>5] <- 0
tdf$X2[cumsum(tdf$X2)>5] <- 0
tdf$X3[cumsum(tdf$X3)>5] <- 0
tdf$X4[cumsum(tdf$X4)>5] <- 0
tdf$X5[cumsum(tdf$X5)>5] <- 0


t(tdf)
#>    V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16
#> X1  0  0  0  1  1  0  1  1  1   0   0   0   0   0   0   0
#> X2  0  1  1  0  0  0  0  0  1   1   0   0   0   0   1   0
#> X3  1  0  1  0  0  0  1  1  1   0   0   0   0   0   0   0
#> X4  0  1  1  0  0  0  0  0  0   0   0   0   0   1   1   0
#> X5  0  1  0  1  0  1  0  0  0   0   0   0   0   1   1   0

你可以先t()你的dataframe。

并使用cumsum函数和t返回结果

library(data.table)

dt <- fread('0 0 0 1 1 0 1 1 1 0 0 0 0 1 0 0
0 1 1 0 0 0 0 0 1 1 0 0 0 0 1 0
1 0 1 0 0 0 1 1 1 0 0 0 0 1 0 1
0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0
0 1 0 1 0 1 0 0 0 0 0 0 0 1 1 0')

tdt <- data.table(t(dt))

tdt[,names(tdt):=lapply(.SD,function(x) {x[cumsum(x)>5] <- 0
                                         x})]

t(tdt)
#>    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
#> V1    0    0    0    1    1    0    1    1    1     0     0     0     0     0
#> V2    0    1    1    0    0    0    0    0    1     1     0     0     0     0
#> V3    1    0    1    0    0    0    1    1    1     0     0     0     0     0
#> V4    0    1    1    0    0    0    0    0    0     0     0     0     0     1
#> V5    0    1    0    1    0    1    0    0    0     0     0     0     0     1
#>    [,15] [,16]
#> V1     0     0
#> V2     1     0
#> V3     0     0
#> V4     1     0
#> V5     1     0

reprex package 创建于 2020-04-23 (v0.3.0)

关于r - 我想添加数据框的递增连续列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61387015/

相关文章:

r - 从 sf linestring 对象创建具有正确索引标签的 inla.graph 对象

r - 如何在将两根柱子保持在一起的同时熔化柱子?

r - 从大数据集中选择R中邮政编码边界的范围

r - 在 R 中的热图中在连接的单元周围绘制等高线

r - 在 R 中的字符串中不存在的数据框中创建列

r - paste0 或 paste 在遇到 r 中的特殊字符时失败

r - 根据列名向量在列表中按列子集数据帧并汇总列

r - 使用 R 的 Google 预测

r - 在给定其他变量的情况下显示一个变量的存在百分比

根据顺序删除重复项