Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于定义的i创建具有动态列名和重复值的循环_R_Loops - Fatal编程技术网

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