R添加小计,直到下一个空白
我在csv文件中有如下数据:R添加小计,直到下一个空白,r,R,我在csv文件中有如下数据: Id A B 1 1 2 1 1 3 1 4 1 1 5 1 6 1 1 7 1 我想把所有的加起来,直到下一个空格出现。不是所有的总和。只有“小计”,直到下一个空白。因此,在上述示例中,这将导致: A B 2 3 3 2 我在Excel中尝试过,但找不到解决方案。 谢谢 更新: 这是你给我的代码,并且(某种程度上)有效: 你可以试试这个(我填了一些NAs) dat使用na.strings=”“读取csv文件,以获取空字段所在的na值,
Id A B
1 1
2 1 1
3 1
4 1 1
5 1
6 1 1
7 1
我想把所有的加起来,直到下一个空格出现。不是所有的总和。只有“小计”,直到下一个空白。因此,在上述示例中,这将导致:
A B
2 3
3 2
我在Excel中尝试过,但找不到解决方案。
谢谢
更新:
这是你给我的代码,并且(某种程度上)有效:
你可以试试这个(我填了一些NAs)
dat使用na.strings=”“
读取csv文件,以获取空字段所在的na
值,并使用计算运行的rle
定义函数运行。最后,sapply
在所需列上运行
,并转换到data.frame:
Lines <- '"Id","A","B"
"1",1,
"2",1,1
"3",,1
"4",1,1
"5",1,
"6",1,1
"7",,1'
DF <- read.csv(text = Lines, na.strings = "")
runs <- function(x) with(rle(x), lengths[!is.na(values)])
as.data.frame(sapply(DF[-1], runs))
如果A列和B列中连续1的序列数不同,会发生什么情况?问题不清楚,谢谢。非常有趣。似乎有效。但我想将其保存为可以打印的格式(或表格)。这可能吗。只是小计清单。我运行了你的代码,它给了我我想要的,然后打印(attr(,“na.action”),然后打印似乎每秒钟一个数字的东西,然后打印attr(,“class”)并总是“省略”。我只需要第一部分,直到我想(attr(,“na.action”)。@user413734你可以用as.data.frame(…)将它强制到一个数据帧
您可以绘图,查看编辑出于某种原因,我总是会收到一个错误“数据中的错误。框架…参数意味着不同的行数:”)。这里的示例适用于您吗?dput
您正在处理的数据框架,并将其添加到您的问题中。我将其粘贴为您要求的更新。我假设所有内容都是attr(,“na.action”)之前的内容是我想要的。至少看起来是这样。我想在一个包含2000多行和53个变量的csv中读取。我如何导入它,使其与您的代码一起工作?DFDF相同错误:data.frame中的错误(X1=c(2L、3L、8L、2L、5L、13L、4L、25L、2L、24L,:参数表示行数不同:显示的代码是自包含的,不会产生任何错误。从答案中复制它并将其粘贴到R会话中。如果出现错误,则与显示的代码不同。
$X1
[1] 2 3 8 2 5 13 4 25 2 24 5 9 8 2 20 24 5 3 1 16 10 15 2 15 3 15 1
[28] 10 3 1 12 4 11 6 3 1 23 24 5 6 5 1 1 7 12 3 8 4 7 2 6 4 4 1
[55] 1 1 24 5 3 2 4 9 3 5 22 1 3 10 6 1 14 3 6 6 8 3 13 2 7 3 2
[82] 16 16 2 3 2 12 2 9 23 3 9 7 8 2 6 3 23 10 4 13 3 2 5 1 1 7 10
[109] 8 5 4 3 4 5 5 1 4 10 1 16 39 9 1 1 9 3 2 13 5 9 7 9 6 1 3
[136] 1 4 44 21 2 12 1 59 4 2 7 1 8 3 12 10 10 8 18 5 1 1 13 11 2 1 18
[163] 12 11 5 1 2 8 8 7 5 6 2 5 19 2 21 3 1 18 1 2 9 12 11 3 8 2 5
[190] 11 2 5 20 4 16 7 11 2 14 14 15 2 2 6 12 5 13 3 4 2 2 3 8 11 11 14
[217] 2 4 2 3 9 5 6 6 4 10 5 2 9 18 17 5 4 3 6 9 23 3 12 3 5 1 19
[244] 4 4 13 26 3 9 17 3 3 1 1 4 17 14 8 2 7 6 5 37 6 1 5 9 13 1 5
[271] 2 22
attr(,"na.action")
[1] 1 3 5 7 9 11 13 15 17 18 20 22 24 26 28 30 32 34 36 38
[21] 40 42 44 46 48 50 52 53 55 57 59 61 63 65 67 69 71 73 74 76
[41] 78 80 82 83 85 87 89 91 93 95 97 99 101 103 105 107 108 110 112 113
[61] 115 117 119 121 123 125 127 129 130 132 134 136 138 140 142 144 145 147 149 151
[81] 152 154 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 186 188 190
[101] 192 194 196 198 200 202 203 205 207 209 211 213 215 217 219 221 223 225 227 229
[121] 230 232 234 236 238 240 242 244 246 248 250 252 254 256 258 260 261 263 265 267
[141] 269 271 273 274 275 277 279 281 283 284 286 288 290 292 293 295 297 299 301 303
[161] 305 307 309 311 313 315 317 319 321 323 325 327 329 331 333 334 336 338 340 342
[181] 344 346 348 349 351 353 355 357 359 361 363 365 367 368 370 372 374 376 378 380
[201] 382 384 386 388 390 392 394 396 398 400 402 403 405 407 409 411 412 414 416 418
[221] 420 422 424 426 428 430 431 433 434 436 438 440 442 444 446 448 450 452 454 456
[241] 458 459 461 463 465 467 469 471 473 475 477 479 481 483 485 487 489 491 493 495
[261] 497 499 501 503 505 507 509 511 512 514 516 518 520 522 524 526 527 529 531 532
[281] 534 536 537 539 541 543 545 547 549 551 553 555 556 558 560 562 564 566 568 570
[301] 572 574
attr(,"class")
[1] "omit"
dat <- read.table(header = TRUE, text="Id A B
1 1 NA
2 1 1
3 NA 1
4 1 1
5 1 NA
6 1 1
7 NA 1")
sapply(dat[, -1], function(x) na.omit(with(rle(x), lengths * values)))
# A B
# [1,] 2 3
# [2,] 3 2
d <- as.data.frame(sapply(dat[, -1], function(x) na.omit(with(rle(x), lengths * values))))
str(d)
plot(d)
Lines <- '"Id","A","B"
"1",1,
"2",1,1
"3",,1
"4",1,1
"5",1,
"6",1,1
"7",,1'
DF <- read.csv(text = Lines, na.strings = "")
runs <- function(x) with(rle(x), lengths[!is.na(values)])
as.data.frame(sapply(DF[-1], runs))
A B
1 2 3
2 3 2