R 基于定义的i创建具有动态列名和重复值的循环
我有以下数据帧:R 基于定义的i创建具有动态列名和重复值的循环,r,loops,R,Loops,我有以下数据帧: id <- c("A", "B", "C") col1 <- c(1, 3, 5) col2 <- c(6, 12, 9) col3 <- c(2, 4, 30) df <- data.frame(id, col1, col2, col3) id这里有一种方法可以做到这一点map\u dfc: library(dplyr) library(purrr) vals <- seq(f
id <- c("A", "B", "C")
col1 <- c(1, 3, 5)
col2 <- c(6, 12, 9)
col3 <- c(2, 4, 30)
df <- data.frame(id, col1, col2, col3)
id这里有一种方法可以做到这一点map\u dfc
:
library(dplyr)
library(purrr)
vals <- seq(from=20, to=40, by=5)
bind_cols(
df, map_dfc(vals, function(x) df %>%
mutate(across(starts_with("col"), ~ +(. < x))) %>%
transmute(!!paste0('sum_', x) := rowSums(select(., starts_with('col'))))))
库(dplyr)
图书馆(purrr)
VAL%
突变(跨越(以(“col”)开始,~+(.%
transmute(!!paste0('sum',x):=行和(select(,以('col'))()开头)
或在R基中:
cols <- grep('col', names(df))
df[paste0('sum_', vals)] <- lapply(vals, function(x) rowSums(+(df[cols] < x)))
df
# id col1 col2 col3 sum_20 sum_25 sum_30 sum_35 sum_40
#1 A 1 6 2 3 3 3 3 3
#2 B 3 12 4 3 3 3 3 3
#3 C 5 9 30 2 2 2 3 3
这很有帮助。我只是澄清了一下我的问题。您提供的结构似乎没有给我添加其他命令的灵活性。@hy9fesh抱歉,我不明白您所说的灵活性是什么。
cols <- grep('col', names(df))
df[paste0('sum_', vals)] <- lapply(vals, function(x) rowSums(+(df[cols] < x)))
df
# id col1 col2 col3 sum_20 sum_25 sum_30 sum_35 sum_40
#1 A 1 6 2 3 3 3 3 3
#2 B 3 12 4 3 3 3 3 3
#3 C 5 9 30 2 2 2 3 3