我做了一個回圈:
我做了一個回圈。
for (i in 1: ncol(df)) {
m = i
n = i 1
if (i %% 2 ! = 0) {!
df_cum$V1 < - sum(df[/span>。 m] df[。 n])
}
}
但是,為新串列加值的方式是錯誤的:
df_cum$V1 < - sum(df[/span>, m] df[。 n])
如果有人知道如何在R中做到這一點,將非常感激
uj5u.com熱心網友回復:你可以試試split.default(),即
sapply(split. 默認(df, gsub('d ', ', names(df)))。 sum)
A B
17 12
uj5u.com熱心網友回復:
一個使用tapply的基礎R選項 -
tapply(unlist(df),
rep(1: ncol(df)。 每個= nrow(df) * 2。 長度。 out = nrow(df) = nrow() 運算子">* ncol(df))。
sum)
# 1 2 3
#17 12 13
這里的邏輯是創建每2列的組,并對它們進行sum。
資料
。df <- data. frame(A1 = c(0。 3, 2)。 A2 = c(2。 6, 4),
B1 = c(3。 0, 1)。 B2 = c(2。 3, 3),
C1 = c(7。 3, 2)。 C2 = c(1。 0, 0))
uj5u.com熱心網友回復:
我們可以在tidyverse
library(dplyr)
library(tidyr)
df1 %> %
pivot_longer(everything()。 names_to = c(" 。 value", "grp"),
names_sep ="(?<=[A-Z])(?=[0-9])") %>%
select(-grp) %>%
總結(across(everything()。 sum, na. rm = TRUE), 。 groups = 'drop') 。
輸出
# A tibble: 1 x 3
A B C
<dbl> < dbl> <dbl>
1 17 12 13
或者使用基礎R
aggregate(values ~ . , transform(stack(df1),>
ind = sub("d ", "。 ind))。 FUN = sum)
ind值
1 A 17
2 B 12
3 C 13
或者用rowsum從base R的另一個選項
with(stack(df1), rowsum(values, 組= trimws(ind。 whitespace = "d ")))
[,1]
A 17
B 12
C13
或者另一個選擇是用colSums和rowsum
{tmp <- colSums(df1); rowsum(tmp。 組= substr(names(tmp)。 1, 1))}
[,1]
A 17
B 12
C13
data
df1 < -結構(list(A1 = c(/span>0, 3, 2)。 A2 = c(2。 6, 4)。 B1 = c(3, 0,
1)。 B2 = c(2。 3。 3)。 C1 = c(7, 3, 2)。 C2 = c(1。 0, 0)),
class = "data.frame", 行。 names = c(NA,)
-3L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/334050.html
標籤:
上一篇:R命令`group_by`。

