gpt4 book ai didi

r - 使用 dplyr 改变数据框中的多列

转载 作者:行者123 更新时间:2023-12-02 11:42:01 24 4
gpt4 key购买 nike

我有以下数据框df:

  v1 v2 v3 v4
1 1 5 7 4
2 2 6 10 3

我想获得以下数据框df2乘以列v1*v3和v2*v4:

  v1 v2 v3 v4 v1v3 v2v4
1 1 5 7 4 7 20
2 2 6 10 3 20 18

如何使用 dplyr 做到这一点?使用mutate_each

我需要一个可以推广到大量变量的解决方案,而不仅仅是 4 个变量(v1 到 v4)。这是生成示例的代码:

v1 <- c(1, 2)
v2 <- c(5,6)
v3 <- c(7, 10)
v4 <- c(4, 3)
df <- data.frame(v1, v2, v3, v4)
v1v3 <- c(v1 * v3)
v2v4 <- c(v2 * v4)
df2 <- cbind(df, v1v3, v2v4)

最佳答案

你们真的很接近。

df2 <- 
df %>%
mutate(v1v3 = v1 * v3,
v2v4 = v2 * v4)

这是一种非常简单的语言,对吧?

更多精彩技巧请参见here.

编辑:感谢@Facottons 指向这个答案:https://stackoverflow.com/a/34377242/5088194 ,这是解决此问题的整洁方法。它使人们不必在每个所需的新列中编写一行硬代码。虽然它比 Base R 方法更冗长,但逻辑至少更直接透明/可读。还值得注意的是,要使这种方法发挥作用,行数必须至少是列数的一半。

# prep the product column names (also acting as row numbers)
df <-
df %>%
mutate(prod_grp = paste0("v", row_number(), "v", row_number() + 2))

# converting data to tidy format and pairing columns to be multiplied together.
tidy_df <-
df %>%
gather(column, value, -prod_grp) %>%
mutate(column = as.numeric(sub("v", "", column)),
pair = column - 2) %>%
mutate(pair = if_else(pair < 1, pair + 2, pair))

# summarize the products for each column
prod_df <-
tidy_df %>%
group_by(prod_grp, pair) %>%
summarize(val = prod(value)) %>%
spread(prod_grp, val) %>%
mutate(pair = paste0("v", pair, "v", pair + 2)) %>%
rename(prod_grp = pair)

# put the original frame and summary frames together
final_df <-
df %>%
left_join(prod_df) %>%
select(-prod_grp)

关于r - 使用 dplyr 改变数据框中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40511202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com